デフォルト引数の設定は右側の引数から順次行っていくというルールがあります つまり引数の初期化は右側の引数から順次行う必要があります

solarplexuss「では次のプログラムを実行してみよう。」



#include <iostream>


using namespace std;


void f(int x= 1, int y, int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


int main() {


f(5,6,7);


return 0;

}



ビルド実行結果



エラー (アクティブ) E0306 既定の引数がパラメーター リストの末尾にありません

エラー C2548 'f': 3 番目の引数に対して既定の引数がありません。

エラー C2548 'f': 2 番目の引数に対して既定の引数がありません。


solarplexuss


「あれ?


f(5,6,7);


が実行できていない?????


なんで?


ちゃんと


f(5,6,7);


と記述して


int x=5;

int y=6;

int z=7;


をおこなって

変数

x

y

z

を初期化したはずなのにねぃ


てんCちゃん


それと


ビルド結果の


エラー C2548 'f': 3 番目の引数に対して既定の引数がありません。

エラー C2548 'f': 2 番目の引数に対して既定の引数がありません。


もなんか気になる・・・


f(5,6,7);


と記述して

変数

x

y

z

を初期化したなら


自作関数の引数に


数値は代入されているはずで


エラー C2548 'f': 3 番目の引数に対して既定の引数がありません。

エラー C2548 'f': 2 番目の引数に対して既定の引数がありません。


が表示されるはずはないとおもうんだけどぉ


ねえ、ねえ 😊 ソーラー


どう思う?」


ソーラー「ははあ


どうやら


自作関数の定義


void f(int x= 1, int y, int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}



void f(int x= 1, int y, int z)


の部分に問題があるんじゃないかな?」


solarplexusss「えぇ?」


ソーラー「では


自作関数fの定義を


void f(int x= 1, int y, int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


から


void f(int x, int y=1, int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


に変更して


プログラムを実行してみます。



#include <iostream>


using namespace std;


void f(int x, int y = 1, int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


int main() {


f(5,6,7);


return 0;

}


ビルド実行結果



エラー (アクティブ) E0306 既定の引数がパラメーター リストの末尾にありません

エラー C2548 'f': 3 番目の引数に対して既定の引数がありません。


ソーラー「うふふ やっぱり


ビルド実行できません。


ね solarplexussさん」


solarplexuss「やっぱり


f(5,6,7);


と記述して

変数

x

y

z

を初期化したなら


自作関数の引数に


数値は代入されているはずで


このビルド結果が

👇

エラー C2548 'f': 3 番目の引数に対して既定の引数がありません。

エラー C2548 'f': 2 番目の引数に対して既定の引数がありません。


表示されるはずはないんだけど???


なんで??


ただ・・・


自作関数fの定義を


void f(int x=1, int y , int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}

としたときは


ビルド実行結果は


エラー (アクティブ) E0306 既定の引数がパラメーター リストの末尾にありません

エラー C2548 'f': 3 番目の引数に対して既定の引数がありません。

エラー C2548 'f': 2 番目の引数に対して既定の引数がありません。


だったのに


自作関数fの定義を


void f(int x, int y = 1, int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


としたときは


ビルド実行結果は


エラー (アクティブ) E0306 既定の引数がパラメーター リストの末尾にありません

エラー C2548 'f': 3 番目の引数に対して既定の引数がありません。


となっているのが


不思議な感じがするなぁ(´▽`*)」


ソーラー「うふふ そうでしょう、


では


次は自作関数fの定義を


void f(int x, int y = 1, int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


から


void f(int x, int y, int z=1) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


に変更して


プログラムを実行してみましょう。」


solarplexuss「


次は自作関数の定義を

      👇ここに注目

void f(int x, int y = 1, int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


から

        👇ここに注目

void f(int x, int y, int z=1) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


に変更して


プログラムを実行する~~~~~?????


しますか ふっつう


ビルドエラーが出るのはほぼ間違いないとおもうけど?????」


ソーラー「まあ、 ここまできたらビルド実行してみませんか


面白い結果が出てくるかもしれませんよ


ねえ てんC


どう思う?」


てんC「自作関数fの定義を


void f(int x=1, int y , int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}

としたときは


ビルド実行結果は


エラー (アクティブ) E0306 既定の引数がパラメーター リストの末尾にありません

エラー C2548 'f': 3 番目の引数に対して既定の引数がありません。

エラー C2548 'f': 2 番目の引数に対して既定の引数がありません。


でした。


自作関数fの定義を


void f(int x, int y = 1, int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


としたときは


ビルド実行結果は


エラー (アクティブ) E0306 既定の引数がパラメーター リストの末尾にありません

エラー C2548 'f': 3 番目の引数に対して既定の引数がありません。


でした。


となると


自作関数fの定義を


void f(int x, int y, int z=1) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


としたときは


さらにビルド実行結果が変化している可能性があります。」


solarplexuss「あ、そういえばそうだね。


これは 意外と面白いビルド結果が出るかも(´▽`*)」


ソーラー「それでは


自作関数fの定義を


void f(int x, int y = 1, int z) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


から


void f(int x, int y, int z=1) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


に変更して


プログラムを実行してみます。」



#include <iostream>


using namespace std;


void f(int x, int y, int z=1) {


cout << x << "をとりこみました。\n";

cout << y << "をとりこみました。\n";

cout << z << "をとりこみました。\n";


}


int main() {


f(5,6,7);


return 0;

}



ビルド実行結果


5をとりこみました。

6をとりこみました。

7をとりこみました。


ソーラー「やったね!


うまくプログラムをビルド実行できました。」


てんC「きゃっ きゃつ(´▽`*)/」


solarplexuss「わぁ ほんとうだ


なんで~~


不思議だね」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る