初始化影子变量

2024-04-29

标准中是否有任何内容定义从它隐藏的变量初始化变量?

例如:

int i = 7;
{
    int i = i;
}

Visual Studio 2013 允许这样做而不发出警告并按预期工作。内在i变量是 7。然而,Clang 和 GCC 给我一个警告,关于从自身初始化的初始化变量将不会被初始化。


该标准是这样说的:

3.3.2申报点[基本范围.pdecl]

1 The 声明点因为名称紧接在其完整声明符之后 (第 8 条)及其之前初始化器(如果有的话),除非下面注明。 [ 例子:

int x = 12;
{ int x = x; }

这里第二个x被初始化 有它自己的(不确定的)价值。 —结束示例]

这正是你的情况。该程序通过访问未初始化的对象来表现出未定义的行为。

我的 VS2013 报告副本error C4700: uninitialized local variable 'i' used对于这段代码。不确定为什么你的副本表现不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初始化影子变量 的相关文章

随机推荐