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

标签 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,通过调用 MyObject(double) 构造函数从 0 隐式构造。此构造函数允许您像这样隐式实例化 MyObjects:

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

如果此行为不是预期的,则使构造函数显式。这还需要更改 function 的默认参数:

explicit MyObject(double n);

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

关于c++ - 具有默认参数值的函数中的默认对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17163658/

相关文章:

c++ - 访问模板类结构类型成员

c++ - c char string 和 stdint.h uint8_t 在嵌入式系统中的兼容性

c++ - 从动态加载的dll内部调用C++函数

c++ - 通过 numeric_limits 为枚举分配最大值?

C++ CRT 内存泄漏

c++ - C++20 范围是否具有过滤器或 any_of 的值(非谓词)版本?

C++交叉初始化错误

c++ - 当变量不是局部变量时我应该继续返回吗

c++ - 使用以位集为键的 map 时出现问题

c++ - vs C++ 跨端 union