【发布时间】:2020-04-11 04:02:01
【问题描述】:
特别是关于 VS 2019 上的 MSVC,廉价对象上的 const & 在最大优化下看起来像什么?有人可以肯定地说,以const & 做事至少总是无害的吗?
void foo( char );
void foo( const char & );
我知道它的实现定义了一个引用是否是一个指针,但我只想知道专门针对 MSVC 的实现,如果到处都有const & 真的很糟糕。
如果是这样,我是否应该专门使用大量使用的模板函数来传递值而不是引用大小为
【问题讨论】:
-
我不确定
sizeof(void*)是否是确定值是否应始终按值传递的良好基础 - 考虑到现代编译器和处理器如何使用 SIMD 执行一些奇怪的技巧来传递寄存器中的大参数(更不用说函数内联了!)。 -
我认为,尤其是在 2020 年,编译器应该始终弄清楚通过 const-ref 是否更好,但我对 MSVC 永远无法确定。
-
无论如何 - 我更担心你这样做是一个过早的微优化(which is a bad thing和never try to outsmart the compiler!)
-
我刚从 2 年前发现这个 - 有人试图做和你完全相同的事情:softwareengineering.stackexchange.com/questions/372105/… - 答案似乎表明(令我惊讶的是,我承认)我们应该总是更喜欢
const &而不是按值,呵呵! -
>>> 我被教导/了解到非平凡的函数参数(即大多数非原始类型)最好通过 const 引用传递——我读过的很多书都推荐这个作为“最佳实践”。
标签: c++ visual-c++ c++17 visual-studio-2019