gpt4 book ai didi

c++ - 类类名(值);和类类名=值;显式构造函数时的区别

转载 作者:太空宇宙 更新时间:2023-11-04 15:53:02 27 4
gpt4 key购买 nike

当构造函数是显式时,它不用于隐式转换。在给定的代码片段中,构造函数被标记为 explicit。那为什么在 foo obj1(10.25); 情况下它可以工作,而在 foo obj2=10.25; 情况下它不工作?

#include <iostream>
class foo
{
int x;
public:
explicit foo( int x ):x(x)
{}
};

int main()
{
foo obj(10.25); // Not an error. Why ?
foo obj2 = 10.25; // Error
getchar();
return 0;
}

错误:错误 C2440:“正在初始化”:无法从“double”转换为“foo”

最佳答案

这两种形式的初始化在技术上是不同的。第一个 (foo obj(10.25);) 称为直接初始化。第二个 (foo obj = 10.25;) 称为复制初始化。

explicit 构造函数只能在显式初始化对象时使用。直接初始化是显式初始化对象的一种形式。另一种显式初始化形式是使用强制转换。

关于c++ - 类类名(值);和类类名=值;显式构造函数时的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4708264/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com