我无法理解有关 Herb Sutter 在他的演示文稿中建议的完美转发选项的几点 "Back to the Basics! Essentials of Modern C++ Style" (@1:15:00) 在 CppCon 2014。 三张相关幻灯片 ( here are the slides online ) 如下:
我认为在选项 #4 中,如果 String
的衰减类型与 std::string
相同并且与规定的没有不同,则应启用模板化成员函数在幻灯片上(否则选项 #2 和 #4 将不等价,并且没有接受非 std::string
右值的 std::string
赋值运算符) .
但除此之外,我不明白
- 除了右值和之外,选项 #4 还可以窃取什么
- 为什么,如第三张幻灯片的基准测试所示,选项 #4 比 #2 快得多(尤其是在最后一张基准测试中)。他们不应该做同样的事情吗?
最佳答案
幻灯片有错误,应该是std::enable_if<std::is_same<...
, 事实上,在演讲中实际显示的幻灯片中没有错误,你可以看到它 at 1:16:58 :
是的,正如@dyp 指出的那样,std::enable_if_t<std::is_convertible<String, std::string>::value>>
更有意义。
关于c++ - Herb Sutter 的 CppCon Perfect Forwarding 幻灯片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29590883/