type name() 和 type name = type() 有什么区别?
What's the difference between type name() and type name = type()?
我是 C++ 的新手,正在尝试了解一些东西。我的 main.cpp:
中有这段代码
Radio r = Radio("PSR", 100.8);
或那个代码:
Radio r("PSR", 100.8);
两者似乎都有效并且做同样的事情。那有什么区别呢?
Radio r = Radio("PSR", 100.8);
是 copy initialization while Radio r("PSR", 100.8);
is direct initialization.
C++17
由于 mandatory copy elison 来自 C++17,两者是等价的。
Radio r = Radio("PSR", 100.8); //from C++17 this is same as writing Radio r("PSR", 100.8);
C++17 之前的版本
但是 在 C++17 之前,第一种情况 Radio r = Radio("PSR", 100.8);
可能会导致创建一个临时文件,使用它 r
进行复制初始化。这是因为在 C++17 之前,有 non-mandatory copy elison.
另一件需要注意的事情是,如果你要写:
type name(); //this is a function declaration
以上是名为 name
的函数的声明,该函数具有 type
的 return 类型并具有 0
个参数。
我是 C++ 的新手,正在尝试了解一些东西。我的 main.cpp:
中有这段代码Radio r = Radio("PSR", 100.8);
或那个代码:
Radio r("PSR", 100.8);
两者似乎都有效并且做同样的事情。那有什么区别呢?
Radio r = Radio("PSR", 100.8);
是 copy initialization while Radio r("PSR", 100.8);
is direct initialization.
C++17
由于 mandatory copy elison 来自 C++17,两者是等价的。
Radio r = Radio("PSR", 100.8); //from C++17 this is same as writing Radio r("PSR", 100.8);
C++17 之前的版本
但是 在 C++17 之前,第一种情况 Radio r = Radio("PSR", 100.8);
可能会导致创建一个临时文件,使用它 r
进行复制初始化。这是因为在 C++17 之前,有 non-mandatory copy elison.
另一件需要注意的事情是,如果你要写:
type name(); //this is a function declaration
以上是名为 name
的函数的声明,该函数具有 type
的 return 类型并具有 0
个参数。