gpt4 book ai didi

c++ - 为什么当构造函数引用字符串时无法正确打印?

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

我有以下代码,当调用其析构函数时,它不会打印正确的字符串

struct Tracer {

Tracer( const std::string& name_in)
: name{ name_in } {
std::cout << name << " constructed.\n";
}

~Tracer() {
std::cout << name << " destructed.\n";
}

private:

const std::string& name;
};

Tracer static_tracer{ "static Tracer" };

int main() {

}

输出:构建静态跟踪器。

�1�Q�

但是以下代码可以按预期工作:

Tracer( std::string name_in)
: name{ std:move(name_in) } {
std::cout << name << " constructed.\n";
}

private:
std::string name;

输出:构建静态跟踪器。

静态示踪剂已被破坏。

或者当使用字符串 View 或简单的字符串时。

在第一个代码中程序终止期间我们是如何丢失对字符串的引用的?

此外,我们不应该使用 move() 释放对字符串的引用吗,因为它有构造函数作用域?

谢谢!

最佳答案

问题是您无法对 const char[14] 进行字符串引用 (std::string const&),即 "static追踪器”

为了使其正常工作,C++ 发明了一个临时对象 std::string{"static Tracer"}。该对象将一直存在,直到您的构造函数返回为止,但不会再存在static_tracer 的构造函数在 main 开始之前返回。显然,析构函数也在构造函数返回后运行。

关于c++ - 为什么当构造函数引用字符串时无法正确打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61207101/

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