c – 具有默认参数值的函数中的默认对象值

到目前为止,我知道如果你想将参数的默认值传递给作为对象的函数,你可以这样做:

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";}
};

此外,这种行为记录在哪里(因为我搜索并找不到它)?

最佳答案
参数默认为通过调用MyObject(double)构造函数从0隐式构造的MyObject.此构造函数允许您隐式实例化MyObjects,如下所示:

MyObject o1 = 0;
MyObject o2 = 420/10.;

如果不打算这样做,那么使构造函数显式.这还需要更改函数的默认参数:

explicit MyObject(double n);

void function(MyObject obj = MyObject(0));

转载注明原文:c – 具有默认参数值的函数中的默认对象值 - 代码日志