加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 04:56:34 所属栏目:百科 来源:网络整理
导读:到目前为止,我知道如果你想将参数的默认值传递给作为对象的函数,你可以这样做: void function(MyObject obj = MyObject()){ ...} 但是,我最近遇到了一些有趣的语法,这让我很困惑.当我们这样调用函数时会发生什么? void function(MyObject obj = 0){ ...}
到目前为止,我知道如果你想将参数的默认值传递给作为对象的函数,你可以这样做:
void function(MyObject obj = MyObject()){
    ...
}

但是,我最近遇到了一些有趣的语法,这让我很困惑.当我们这样调用函数时会发生什么?

void function(MyObject obj = 0){
    ...
}

注意,我们传递一个对象,而不是一个指针.上面的代码编译得很好,没有错误或警告.这总是用一个参数调用构造函数 – MyObject的定义如下:

class MyObject{
public:
    MyObject(double n){std::cout << "Argumentedn";}
    MyObject(){std::cout << "Defaultn";}
};

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

解决方法

参数默认为通过调用MyObject(double)构造函数从0隐式构造的MyObject.此构造函数允许您隐式实例化MyObjects,如下所示:
MyObject o1 = 0;
MyObject o2 = 420/10.;

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

explicit MyObject(double n);

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读