我正在尝试理解参数默认值,我有这个代码将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
按任意键继续。 。
答案 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
$