const引用临时对象的成员

格罗曼

已知特征的C ++,一个常量引用延伸从函数返回的临时对象的生命时间,但是它可以接受使用恒定的参考从该函数返回的临时对象的成员?

例子:

#include <string>

std::pair<std::string, int> getPair(int n)
{
    return {std::to_string(n), n};
}

int main(int, char*[])
{
    const int x = 123456;
    const auto& str = getPair(x).first;
    printf("%d = %s\n", x, str.c_str());    
    return 0;
}

输出:

123456 = 123456
Smeeheey

是的,此代码完全可以接受。根据标准,规则为[[class.temporary]):

  1. 在两种情况下,临时变量会在与全表达式结尾不同的时间点被销毁。第一个上下文是调用默认构造函数初始化数组的元素时。如果构造函数具有一个或多个默认参数,则在构造下一个数组元素(如果有)之前,将对在默认参数中创建的每个临时变量的销毁顺序进行排序。

  2. 第二种情况是引用绑定到临时项时。引用绑定到的临时对象或引用绑定到的子对象的完整对象的临时对象在引用的生存期内一直存在...

如您所见,突出显示的行清楚地表明了对子对象的绑定引用是可以接受的,因为整个对象的寿命也必须延长。

请注意,first确实可以作为子对象[intro.object]:

  1. 对象可以包含其他对象,称为子对象。子对象可以是成员子对象(9.2),基类子对象(第10节)或数组元素。不是任何其他对象的子对象的对象称为完整对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

返回对临时对象成员的const引用

const引用类成员是否可以延长临时对象的寿命?

引用const临时对象的意外行为

返回const引用vs临时对象

使用const引用延长临时对象的寿命

const引用临时引用

C ++-使用const引用来延长临时成员,确定成员或UB成员?

关于将const引用绑定到临时对象的子对象

为什么临时对象可以绑定到 const 引用?

有关const引用和临时对象的问题

与const引用关联的临时对象的生命周期(方法链接)

如何通过const引用或通过转发模板临时构造对象

关于将临时对象传递给const引用

返回对临时对象的引用

对指针错误的引用:非常量左值引用“ const * FooBarClass”无法绑定到临时对象

c ++:允许临时对象调用非const成员函数的设计原理是什么?

如何将临时对象作为非常量引用传递给成员函数?

const引用是否绑定到从临时对象转换为悬挂引用的另一个引用?

临时对象最初是const吗?

对结构成员的临时绑定引用

为什么const引用不能延长通过函数传递的临时对象的寿命?

绑定到参数和返回值const引用的C ++临时对象

来自 const char* 类型的临时对象的 cost char*& 类型的非常量引用的无效初始化

对从函数返回的临时对象的引用

从函数返回临时对象的引用

C++ 临时对象引用

const引用合格成员函数

将const类型引用对象注册为C ++类成员对象

从对象调用成员对象,错误:对非const的引用的初始值必须为左值