C ++函数参数默认用法

时间:2013-11-09 17:21:40

标签: c++ function parameter-passing

我正在尝试理解参数默认值,我有这个代码将3个参数传递给函数并返回产品。

如何使用下面cout<<"3---...和“4 ---”行的代码来使用参数中的默认值?请参阅底部的输出

CODE

            #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

按任意键继续。 。

2 个答案:

答案 0 :(得分:0)

我猜测在案例4中你希望值40成为第三个参数。没有办法用函数默认参数来做,顺序就是定义它的顺序。但是,您可以覆盖该函数,以创建一个双参数版本,该版本使用正确的“默认”参数调用三参数函数:

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

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

使用上述函数,使用一个或两个参数调用,可以调用最后一个函数,但如果使用三个参数调用它,则调用第一个函数。

很遗憾,现在无法使用a设置,但b设置为默认设置。相反,您已为其使用不同的命名函数,或添加伪参数或检查例如对于参数的特殊值,或者你必须求助于像Boost parameter library这样的“黑客”(如克里斯所建议的那样)。

答案 1 :(得分: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
$