gpt4 book ai didi

c++ - 使用 const char* 初始化 const ref 字符串成员时,幕后会发生什么

转载 作者:行者123 更新时间:2023-12-01 14:22:51 24 4
gpt4 key购买 nike

如果从 const char* 初始化 const 字符串。我假设创建了一个临时 std::string 对象并且引用是指临时对象。
这是正确的吗?

#include<string>

struct A{
const std::string& str_;
A(const std::string& o):str_(o){}
};

int main(){

A moshe{"moshe"};

}

最佳答案

是的,一个 const std::string将从 const char* 构建和 const std::string&字段将引用此临时 const std::string它具有构造函数的作用域。

通常,引用会在初始化时将对象的生命周期延长到它自己的生命周期,但这是一个异常(exception) ( cppreference )

Whenever a reference is bound to a temporary or to a subobject thereof, the lifetime of the temporary is extended to match the lifetime of the reference, with the following exceptions:

...

a temporary bound to a reference member in a constructor initializer list persists only until the constructor exits, not as long as the object exists. (note: such initialization is ill-formed as of DR 1696).



所以临时 const std::string只会在您的 struct 期间处于有效状态正在 build 中。标准允许它的事实似乎是一个已知缺陷( bottom of this page )。

关于c++ - 使用 const char* 初始化 const ref 字符串成员时,幕后会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61829951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com