Radio r = Radio("PSR", 100.8) 和 Radio("PSR", 100.8) 有什么区别?

Ste*_*ing 2 c++ constructor initialization variable-initialization visual-studio

我是 C++ 新手,正在尝试理解一些东西。我的 main.cpp 中有这段代码:

Radio r = Radio("PSR", 100.8);
Run Code Online (Sandbox Code Playgroud)

或该代码:

Radio r("PSR", 100.8);
Run Code Online (Sandbox Code Playgroud)

两者似乎都有效并且做同样的事情。那么有什么区别呢?

use*_*570 6

Radio r = Radio("PSR", 100.8);复制初始化Radio r("PSR", 100.8);,是直接初始化

C++17

从 C++17 开始,由于强制复制 elison,两者是等效的。

Radio r = Radio("PSR", 100.8); //from C++17 this is same as writing Radio r("PSR", 100.8);
Run Code Online (Sandbox Code Playgroud)

先前的 C++17

在 C++17 之前,第一种情况Radio r = Radio("PSR", 100.8);可能会导致创建一个临时的 using 并r进行复制初始化。这是因为在 C++17 之前,存在非强制的 copy elison


另一件需要注意的事情是,如果你要写:

type name(); //this is a function declaration
Run Code Online (Sandbox Code Playgroud)

上面是一个名为 的函数的声明,name该函数的返回类型type为 并具有0参数。