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

ソーラー「それでは


自作関数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「わぁ ほんとうだ


なんで~~


不思議だね」


solarplexuss「


なんで


自作関数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";


}


では


f(5,6,7);


を実行してもビルドエラーがでて


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


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

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

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


}


としたときは


f(5,6,7);


を実行したとき


ビルドエラーがでないのかな?」


てんC「うふふ(´▽`*)」



solarplexuss「う~・・・・・・・・」




ソーラー「じゃじゃ~~ん


それでは


その理由を発表したいと思います。


実は


自作関数のデフォルト引数の設定は


自作関数の定義が


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


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

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

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


}


のように

3つの変数宣言

int x

int y

int z

が引数に用いられているなら



int z👇

int y👇

int x👇


という順番で


デフォルト引数に設定していく必要があります


つまり


自作関数の引数部分の()内の


右側の変数宣言から


順番にデフォルト引数に設定していく必要があります


自作関数の引数部分が


void f(int x, int y, int z)と設定されているなら


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


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


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


のように


デフォルト引数を設定する必要があります。


ですので


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


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


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


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


のように


右側の変数宣言から


順番にデフォルト引数に設定していない場合は


プログラムを実行すると


ビルドエラーが表示されます。


試しに


自作関数の引数を


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


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

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

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


}


のように


デフォルト引数に設定してプログラムを実行すると


ビルドエラーが表示されます。


#include <iostream>


using namespace std;


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


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

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

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


}


int main() {


f(5,6,7);


return 0;

}


ビルド実行結果



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

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

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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