我正在阅读std::for_each
这里的文档http://en.cppreference.com/w/cpp/algorithm/for_each并看到返回值是std::move(f)
为什么标准强制在返回值中移动输入参数?由于输入参数是按值传递的,所以默认情况下不会移动它吗?
当您编译以下代码时,这导致我进行了一些后续操作
Something function(Something something) {
return something;
}
return 语句是在我的系统上具有最高优化级别 (
-O3
) 的移动,为什么大多数编译器不忽略这个返回值?局部值被省略,但函数参数不是..在这种情况下,C++17 是否强制省略?我阅读了该提案(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0135r0.html),但我不完全了解哪些情况符合强制省略的条件。
我已经Apple LLVM version 8.0.0 (clang-800.0.42.1)
在我的 Mac 和g++ 5.4
Ubuntu 16.04 上尝试过这个。