我是 C++ 新手,正在尝试理解一些东西。我的 main.cpp 中有这段代码:
Radio r = Radio("PSR", 100.8);
或该代码:
Radio r("PSR", 100.8);
两者似乎都有效并且做同样的事情。那么有什么区别呢?
Radio r = Radio("PSR", 100.8);
is 复制初始化 https://en.cppreference.com/w/cpp/language/copy_initialization while Radio r("PSR", 100.8);
is 直接初始化 https://en.cppreference.com/w/cpp/language/direct_initialization.
C++17
从 C++17 开始,由于强制复制埃利森 https://en.cppreference.com/w/cpp/language/copy_elision#Mandatory_elision_of_copy/move_operations两者是等价的。
Radio r = Radio("PSR", 100.8); //from C++17 this is same as writing Radio r("PSR", 100.8);
先前的 C++17
But C++17 之前的版本, 第一种情况Radio r = Radio("PSR", 100.8);
可能会导致创建一个临时的使用r
副本已初始化。这是因为在 C++17 之前,有非强制性副本埃利森 https://en.cppreference.com/w/cpp/language/copy_elision#Mandatory_elision_of_copy/move_operations.
另一件需要注意的事情是,如果你要写:
type name(); //this is a function declaration
上面是一个名为的函数的声明name
它的返回类型为type
并且有0
参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)