C++ 为什么这个类返回长度33,而这不是真的?

C++ 为什么这个类返回长度33,而这不是真的?,c++,C++,目前我正在学习类和构造函数。昨天我上传了几乎相同的代码,但有一个不同的问题。我需要了解一些关于授权的事情 在我的代码2中,发生了非常奇怪的事情。在主块中,我创建了对象x,它是容器类的一部分。当我试图输出长度时,我得到输出33,这当然不是真的,或者至少不是预期的 也许我应该为这篇文章写另一篇文章,但它可能有着高度的相关性。我还主要写道: Container x1 = x; std::cout << x1.GetData()[2] << std::endl; std::cou

目前我正在学习类和构造函数。昨天我上传了几乎相同的代码,但有一个不同的问题。我需要了解一些关于授权的事情

在我的代码2中,发生了非常奇怪的事情。在主块中,我创建了对象x,它是容器类的一部分。当我试图输出长度时,我得到输出33,这当然不是真的,或者至少不是预期的

也许我应该为这篇文章写另一篇文章,但它可能有着高度的相关性。我还主要写道:

Container x1 = x;
std::cout << x1.GetData()[2] << std::endl;
std::cout << x1.GetLenght() << std::endl;
容器x1=x;

std::cout
int length=len不修改成员,但创建局部变量。它应该是:

length = len;
或者更好,使用初始值设定项列表:

Container(int len) :
    length{len}, 
    data{new double[length]}
{
}

调试器是怎么说的?如果你仔细观察你所写的两个构造函数,你会发现它们之间有很大的区别。这种差异解释了你得到的奇怪结果。查看您自己的代码并查看您实际编写的代码,而不是您认为自己编写的代码,这是一项重要的技能。编译器应该对此发出警告。当然,大多数初学者会忽略这些警告。在我看来,像在每个成员变量前面加上
m_quot/code>(或类似的东西)这样的约定是个好主意。@john Compiler确实会在您询问时发出警告<代码>-Wshadow
length = len;
Container(int len) :
    length{len}, 
    data{new double[length]}
{
}