gpt4 book ai didi

c++ - const 引用是错误的 C++ 11

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:08 25 4
gpt4 key购买 nike

我在 YouTube 上观看 Bjarne Stroustrup,我试图弄清楚为什么这被认为是糟糕的,因为他说这是 C++98 风格的糟糕代码

void setInt(const unsigned int &i)
void takeaString(const std::string &str)

我的意思是你正在传递一个对常量的引用,这样你就可以省去复制操作,而且它甚至不像传递指针那样使用,所以它不必取消引用,所以为什么不好?

最佳答案

在 C++11 之前的版本中,一般的经验法则是如果您不修改参数,则按值传递内置类型,并按 const& 传递类或结构的对象,因为类或结构的对象通常非常大,以致于通过 const& 传递会降低性能。

现在这是一个相当随意的规则,当然你也会看到异常(exception)情况(例如标准库中的迭代器),但它在实践中运作良好并且是一个既定的习惯用法。当你在其他一些程序员的代码中看到 f(int const &i)f(std::string s) 时,你会想知道原因,如果有没有明显的原因,人们会感到困惑。

在 C++11 中,情况可能有所不同。许多人声称由于新的语言特性(移动语义和右值引用),按值传递大对象不再是性能问题,甚至可能更快。看这篇文章:"Want Speed? Pass by Value."但是,当你查看过去的 Stack Overflow 讨论时,你也会发现有经验丰富的程序员反对这种观点。

就我个人而言,我还没有下定决心。我认为 C++11 对我来说太新了,无法真正判断好坏。

然而,如果您出于任何原因必须使用 C++11 之前的编译器,那么 C++11 通常是无关紧要的,因此无论如何了解 C++11 之前的规则都很重要。

关于c++ - const 引用是错误的 C++ 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22286642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com