Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
成员初始化的循环依赖性 我尝试下面的C++代码,它在不同的命名空间上基于静态变量 V1 < /C>和 V2初始化成员变量 C1代码>代码> C2。在我看来,这些变量的初始化会发生循环依赖 #include <iostream> namespace M1 { struct T1 { int c1; T1(); }; T1 v1; } namespace M2 { struct T2 { int c2; T2() { c2 = M1::v1.c1; } // (1) // T2() : c2( M1::v1.c1 ) {} // (2) }; T2 v2; } M1::T1::T1() { c1 = M2::v2.c2; } // (3) // M1::T1::T1() : c1( M2::v2.c2 ) {} // (4) int main() { std::cout << M1::v1.c1 << std::endl; std::cout << M2::v2.c2 << std::endl; return 0; }_C++_Initialization - Fatal编程技术网

成员初始化的循环依赖性 我尝试下面的C++代码,它在不同的命名空间上基于静态变量 V1 < /C>和 V2初始化成员变量 C1代码>代码> C2。在我看来,这些变量的初始化会发生循环依赖 #include <iostream> namespace M1 { struct T1 { int c1; T1(); }; T1 v1; } namespace M2 { struct T2 { int c2; T2() { c2 = M1::v1.c1; } // (1) // T2() : c2( M1::v1.c1 ) {} // (2) }; T2 v2; } M1::T1::T1() { c1 = M2::v2.c2; } // (3) // M1::T1::T1() : c1( M2::v2.c2 ) {} // (4) int main() { std::cout << M1::v1.c1 << std::endl; std::cout << M2::v2.c2 << std::endl; return 0; }

成员初始化的循环依赖性 我尝试下面的C++代码,它在不同的命名空间上基于静态变量 V1 < /C>和 V2初始化成员变量 C1代码>代码> C2。在我看来,这些变量的初始化会发生循环依赖 #include <iostream> namespace M1 { struct T1 { int c1; T1(); }; T1 v1; } namespace M2 { struct T2 { int c2; T2() { c2 = M1::v1.c1; } // (1) // T2() : c2( M1::v1.c1 ) {} // (2) }; T2 v2; } M1::T1::T1() { c1 = M2::v2.c2; } // (3) // M1::T1::T1() : c1( M2::v2.c2 ) {} // (4) int main() { std::cout << M1::v1.c1 << std::endl; std::cout << M2::v2.c2 << std::endl; return 0; },c++,initialization,C++,Initialization,我还尝试用(2)和(4)替换行(1)和(3),但结果没有变化(即,0和0)。所以我想知道为什么这段代码能成功地工作。这里没有循环依赖?如果不是,结果是否只是未定义?(即,打印c1和c2的内存中的垃圾数据?)。谢谢 是的,当值彼此初始化时,存在循环依赖关系 没有错误,原因几乎与您在以下情况下没有得到错误相同: int x; std::cout << x; intx; std::cout是的,当值彼此初始化时,存在循环依赖关系 没有错误,原因几乎与您在以下情况下没有得到错误相同: in

我还尝试用(2)和(4)替换行(1)和(3),但结果没有变化(即,
0
0
)。所以我想知道为什么这段代码能成功地工作。这里没有循环依赖?如果不是,结果是否只是未定义?(即,打印c1和c2的内存中的垃圾数据?)。谢谢

是的,当值彼此初始化时,存在循环依赖关系

没有错误,原因几乎与您在以下情况下没有得到错误相同:

int x;
std::cout << x;
intx;

std::cout是的,当值彼此初始化时,存在循环依赖关系

没有错误,原因几乎与您在以下情况下没有得到错误相同:

int x;
std::cout << x;
intx;

嗯,我还是很困惑。。。这个SO页面似乎解释了像
int
这样的基本类型没有预定义的初始化值。。。这是不是不正确,事实上总是零初始化?(除非出现其他赋值?)(请参见答案中的附录“1”)@spectrum:页面是正确的,但它讨论了类成员变量。您正在使用全局变量。这两件事是不一样的。链接是关于具有自动存储持续时间的对象的,默认情况下,这些对象对于基本类型是未初始化的。静态存储持续时间的初始化为零,例如,在您的例子中,全局变量。我的另一个困惑是,在第(3)行中,即使v2的构造尚未完成,v2.c2是否用于v1.c1的赋值?(即,仅参考成员变量c2,而忽略其他成员(如有))?我还在学习C++,所以可能缺乏基本知识…(如果这太基本了,很抱歉)。@spectrum:“即使v2的构造尚未完成,v2.c2是否用于v1.c1的赋值?”这不会发生。你只有一根线。嗯,我还是很困惑。。。这个SO页面似乎解释了像
int
这样的基本类型没有预定义的初始化值。。。这是不是不正确,事实上总是零初始化?(除非出现其他赋值?)(请参见答案中的附录“1”)@spectrum:页面是正确的,但它讨论了类成员变量。您正在使用全局变量。这两件事是不一样的。链接是关于具有自动存储持续时间的对象的,默认情况下,这些对象对于基本类型是未初始化的。静态存储持续时间的初始化为零,例如,在您的例子中,全局变量。我的另一个困惑是,在第(3)行中,即使v2的构造尚未完成,v2.c2是否用于v1.c1的赋值?(即,仅参考成员变量c2,而忽略其他成员(如有))?我还在学习C++,所以可能缺乏基本知识…(如果这太基本了,很抱歉)。@spectrum:“即使v2的构造尚未完成,v2.c2是否用于v1.c1的赋值?”这不会发生。你只有一根线。