gpt4 book ai didi

C++ 构造函数初始化

转载 作者:行者123 更新时间:2023-11-30 04:16:48 25 4
gpt4 key购买 nike

我有以下代码:

    struct Y {
string& s1; //string s1; throws no error
Y( string src ) : s1(src) { cout<<"s1: "<<s1<<endl; }
void show(){ cout<<s1<<endl; }
};

int main()
{
Y y1("Krypton");
y1.show(); //run-time error
}

y1.show() 应显示“Krypton”,但出现运行时错误(由于调用 y1.show() 时未初始化 s1?)。

Q1。为什么 s1 已经在构造函数初始化列表中初始化过,却没有被初始化?Q2。如果我使用 string s1; 为什么我不会得到同样的错误?而不是引用?

如有任何帮助,我们将不胜感激。

问候,

周杰伦。

最佳答案

您正在从一个临时文件中初始化一个引用。如果您希望 struct Y 的实例保存一个实际的字符串,而不仅仅是一个引用,您需要一个字符串类型的成员变量,而不是对字符串的引用。

Q1. Why would s1 be uninitialized when it has already been initialized in the constructor initialization list?

它已被初始化,但要成为对不再存在的字符串的引用。

Q2. Why don't I get the same error if I use string s1; instead of the reference?

如果该类包含字符串,则它不包含对存在的字符串的引用。

您认为该引用引用的是什么字符串?

关于C++ 构造函数初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17510894/

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