初始化程序会覆盖extern

时间:2016-04-22 15:54:19

标签: c++

我在一个正在处理的大型项目中收到了链接器的双重定义错误。我很惊讶地发现我被允许意外地将初始化程序与extern一起包含在内。

以下编译,但我没想到。

extern int var{3}; // declaration or definition?

//int var{3};

int main()
{
    int varb = var;
    return 0;
}

我希望extern指定一个变量只是被声明,而不是被定义,但是如果我添加一个初始化器,它是否会被定义,为什么?

我查看了以下问题,但他们没有向我解释为什么允许这样做。

第二个答案确实澄清了以下内容:

  

声明是一个定义,除非它包含extern关键字   没有初始化器或函数体

因此规范确实表明这应该是一个定义,但为什么呢?这是否意味着以下两行意味着完全相同的事情?

extern int var{3};
int var{3};

0 个答案:

没有答案