说我有以下课程:
class A
{
public:
A() {
}
A(int a):_a(a){
}
int _a;
};
Run Code Online (Sandbox Code Playgroud)
并具有以下功能:
void someFunc (A a)
{
cout << a._a;
}
Run Code Online (Sandbox Code Playgroud)
所以程序中的以下行正常工作:
someFunc (5); // Calls A(int a) Constructor.
Run Code Online (Sandbox Code Playgroud)
但以下不是:
someFunc(); //Compile error
Run Code Online (Sandbox Code Playgroud)
可以预期,如果它在获取整数时可以构建A,为什么不使用默认构造函数构建一个,当没有参数调用时?
因为someFunc()需要一个参数而你没有提供一个没有的重载.隐式转换int为A存在,但这并不意味着您可以忽略函数的签名并在没有参数的情况下调用它.如果您想在没有参数的情况下调用它,则为其分配默认值a.
void someFunc(A a = A()) {
/* stuff */
}
Run Code Online (Sandbox Code Playgroud)