-2

パラメータのデフォルト設定を理解しようとしていますが、このコードで 3 つの引数を関数に渡し、製品を返します。

cout<<"3---... 以下の「4 ---」行のコードを作成して、パラメーターのデフォルト値を使用するにはどうすればよいですか? 下部にある出力を参照してください

コード

            #include "stdafx.h"
            #include<iostream>

            using namespace std;

            int product(char str,int a=5, int b=2);

            int _tmain(int argc, _TCHAR* argv[])
            {



                cout<<"1---"<<product('A',40,50)<<endl;

                cout<<"2---"<<product('A')<<endl;
                cout<<"3---"<<product('A',NULL,50)<<endl;
                cout<<"4---"<<product('A',40)<<endl;

                int retValue=product('A',40,50);
                cout<<"5---"<<retValue<<endl;

                system("pause");
                return 0;
            }


            int product(char str,int a, int b){

                return(a*b);
            }

出力

1---2000

2---10

3---0

4---80

5---2000

何かキーを押すと続行します 。. .

4

2 に答える 2

0

関連コード:

int product(char str,int a=5, int b=2) { return a*b; }

    cout<<"3---"<<product('A',0,50);   // NULL stripped, it's for pointers
    cout<<"4---"<<product('A',40);

望ましい出力が与えられた場合:

3---0
4---80

#3 のサンプル出力が正しい場合、デフォルトを使用するaとゼロではなく 250 になります。それでは、サンプル出力は間違っていますか?

$ cat t.cpp
#include <iostream>
int product(char c, int a=5, int b=2) { return a*b; }
int main (int c, char **v)
{
    std::cout<<"3---"<<product('A',0,50)<<'\n';
    std::cout<<"4---"<<product('A',40)<<'\n';
}
$ make
g++ -o bin/t -g -O   --std=gnu++11 -march=native -pipe -Wall -Wno-parentheses  t.cpp
$ .bin/t
bash: .bin/t: No such file or directory
$ bin/t
3---0
4---80
$ 
于 2013-11-09T18:34:20.453 に答える
0

ケース4では、値40を3番目の引数にしたいと思います。関数のデフォルト引数でそれを行う方法はありません。順序は定義されているとおりです。ただし、関数をオーバーライドして、正しい「デフォルト」引数で 3 引数関数を呼び出す 2 引数バージョンを作成できます。

int product(char str, int a, int b)
{
    ...
}

int product(char str, int b = 2)
{
    return product(str, 5, b);
}

上記の関数では、1 つまたは 2 つの引数で呼び出すと最後の関数が呼び出されますが、3 つの引数で呼び出すと最初の関数が呼び出されます。

残念ながら、 set を使用して呼び出す方法はありませんaが、bset を使用して上記のデフォルトに設定します。代わりに、別の名前付き関数を使用するか、ダミー引数を追加するか、引数の特別な値などをチェックするか、Boost パラメータ ライブラリのような「ハック」に頼る必要があります(chris が提案したように)。

于 2013-11-09T17:26:31.213 に答える