【发布时间】:2017-05-29 16:07:56
【问题描述】:
如果我理解正确,从 C++17 开始,这段代码现在要求不进行任何复制:
Foo myfunc(void) {
return Foo();
}
auto foo = myfunc(); // no copy
函数参数也是如此吗?下面的代码会优化掉副本吗?
Foo myfunc(Foo foo) {
return foo;
}
auto foo = myfunc(Foo()); // will there be copies?
【问题讨论】:
-
注意:你使用的是C++17,那如果函数不带参数,为什么还要输入
void? -
@Rakete1111 是否有任何标准要求放置
void?一定早于我使用 c++ 的时间 -
@tobi303 我不知道。可能在 C++ 标准化之前,当时它仍然基于 C。但我不知道。
-
嗯,我总是把
void放在 C 中,我记得 empty 和 void 之间是有区别的(iirc empty 允许任意数量的参数?),我想我已经习惯了 :)跨度> -
foo(void)仅在 C 中需要,因为在 C 中foo()表示接受任何参数的函数。在 C++ 中,foo()表示没有参数的函数,foo(void)仅支持向后兼容。
标签: c++ copy-constructor c++17 object-lifetime copy-elision