c++ - 按值赋值还是按引用赋值?

标签 c++

SomeStruct getSomeStruct();

const SomeStruct a = getSomeStruct();
const SomeStruct &b = getSomeStruct();

我理解按值传递按引用按常量引用之间的区别。我的问题是,上面的示例与将参数传递给函数时是否相同?所以 b 的赋值速度更快,因为它不需要复制数据,这与 a 的赋值不同?

最佳答案

So the assignment of b is faster because it doesn't have to copy data, unlike the assignment of a?

没有。在复制方面没有区别。

您正在做的是将一个引用绑定(bind)到一个临时对象。在这种特殊情况下,临时对象的生命周期超出了完整表达式以匹配引用的生命周期。该程序的行为实际上与您没有使用引用一样。在此处使用引用有一个缺点,即程序员可能会对其含义感到困惑,除非他们了解此生命周期延长规则。

当您知道函数不返回引用时,没有理由使用这样的引用。如果该函数确实返回了引用,那么您将避免使用引用进行复制。复制比通过引用的间接复制快还是慢取决于类型。

生命周期延长有用的情况是在模板中,您不知道函数返回的是引用还是引用包装器(这是一个对象,即不是引用,但在某些方面表现得像引用,因为重载运算符)。临时生命周期延长允许两种情况以相同的方式运行。

关于c++ - 按值赋值还是按引用赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61249860/

相关文章:

c++ - 是否需要 std::unique_ptr<T> 才能知道 T 的完整定义?

c++ - 使用 gdb backtrace 调试 MPI 代码

c++ - 可变参数成员函数模板是否可以有两个参数的基本情况?

c++ - 如何设置两个 vector<unique_ptr<...>> 彼此相等?

c++ - 尽管使用了包含防护,但错误 : redefinition of class,

c++ - 定义一个只有标题的类 - 找不到不存在的 cpp

Android OBB/ZIP 加载 (cocos2dx)

c++ - 用 C++ 将数据写入文件 - 最有效的方式?

c++ - 如何为基于 ROM 的程序预初始化内存数据结构?

C++ STL : Duplicating code due to missing base-class for iterator and reverse_iterator