到目前为止,我知道,如果你想传递一个默认值的参数传递给函数是一个对象,你做这样的:默认对象值的值
void function(MyObject obj = MyObject()){
...
}
然而,最近我发现了一些有趣的语法,这让我很困惑。 当我们调用这个函数时会发生什么?
void function(MyObject obj = 0){
...
}
请注意,我们正在传递一个对象,而不是指针。上面的代码编译得很好,没有错误或警告。而这总是一个参数调用构造 - MyObject的定义是这样的:
class MyObject{
public:
MyObject(double n){std::cout << "Argumented\n";}
MyObject(){std::cout << "Default\n";}
};
此外,其中这种行为记录(因为我搜索,但没有找到它)?
C++标准第4章(标准转换)和第12.3章(特殊成员函数/转换)。还有13.3.3.1(隐式协方差序列)。 – jrok
@jrok非常感谢。 –
不客气。这些章节编号来自n3337草案,但我希望它们在官方(C++ 11)标准中是相同的。 – jrok