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/