怎么处理生存期扩展和条件运算符的关系?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

本地lvalue references-to-const和rvalue引用可以延长临时生存期:

const std::string& a = std::string("hello");
std::string&& b = std::string("world");

当初始化器不是简单表达式,而是使用条件运算符时,这是否也有效?

std::string&& c = condition ? std::string("hello") : std::string("world");

如果其中一个结果是临时对象,而另一个结果不是?

std::string d = "hello";
const std::string& e = condition ? d : std::string("world");

当条件为false时,C++是否要求延长临时生命周期?

提问于
用户回答回答于

这两个都行。

要么std::string(first_operand)要么std::string(second_operand)

无论如何,条件表达式的结果是一个新的prvalue临时值,而通过绑定到您的引用来扩展该值。

用户回答回答于
std::string d = "hello";
const std::string& e = condition ? d : std::string("world");

当条件为false时,C++是否要求延长临时生命周期?

会的。条件是rvalue表达式,并且当绑定到const引用编译器将创建一个未命名的对象并将引用绑定到它。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励