【发布时间】:2020-12-24 09:02:34
【问题描述】:
下面的sn-ps,我以为scope1和scope2的标准输出一定是一样的。然而,正如结果显示的那样,没有。结果意味着作用域2 中的m 继承了作用域1 中的一些值。我认为这很奇怪,因为 scoper1 中的 m 应该与 scope2 中的 m 无关。有人可以解释为什么会这样吗?
#include<iostream>
#include<Eigen/Core>
using namespace Eigen;
int main(){
{
std::cout << "scope1" << std::endl;
MatrixXd m(2, 2);
std::cout << m << std::endl;
m << 1, 2, 3, 4;
std::cout << m << std::endl;
}
{
std::cout << "scope2" << std::endl;
MatrixXd m(2, 2);
std::cout << m << std::endl;
m << 1, 2, 3, 4;
std::cout << m << std::endl;
}
}
输出
scope1
0 0
0 0
1 2
3 4
scope2
0 2
3 4
1 2
3 4
【问题讨论】:
-
每个块中的第一个
cout打印未初始化的变量,即undefined behavior。任何事情都可能发生,包括某些值可能被“继承”,但实际上并非如此。