C++中表达式std::string {} = "..."的含义与合法性探讨
C++中
std::string {} = "hi";的含义与合法性解析 1. 表达式的含义
这段代码本质是创建一个**std::string类型的临时对象**:先通过空列表{}完成默认初始化(得到空字符串对象),再调用std::string的赋值运算符,把字符串字面量"hi"赋值给这个临时对象。语句执行结束后,这个无名称的临时对象会被自动销毁。
实际编译时,编译器通常会做优化,直接构造出包含"hi"的std::string临时对象,跳过“默认构造+赋值”的两步过程,但语法逻辑上是上述步骤。
2. 为何合法
从C++11及以后的语法规则来看,合法性源于两点:
- 列表初始化的支持:C++11引入扩展初始化器列表,
std::string {}是合法的对象构造方式,等价于默认构造std::string(),可创建临时std::string对象。 - 表达式语句的规则:
std::string {} = "hi"本质是(std::string {}).operator=("hi")——临时对象可以调用自身的非const成员运算符(std::string的operator=(const char*)是非const成员函数),整个式子是合法表达式,而C++允许单独的表达式作为语句存在。
内容的提问来源于stack exchange,提问作者Rohan Bari
相关产品推荐
相关产品推荐

