【发布时间】:2014-05-14 06:09:08
【问题描述】:
如标准中指定的int a 属于简单的declaration。其实
simple-declaration:
decl-specifier-seq_opt init-declarator-list_opt ; //
attribute-specifier-seq decl-specifier-seq_opt init-declarator-list ;
type-specifier:
trailing-type-specifier //
class-specifier
enum-specifier
trailing-type-specifier:
simple-type-specifier //
elaborated-type-specifier
typename-specifier
cv-qualifier
simple-type-specifier:
nested-name-specifieropt type-name
nested-name-specifier template simple-template-id
char
char16_t
char32_t
wchar_t
bool
short
int //
long
signed
unsigned
float
double
void
auto
decltype-specifier
因此int a 是一个简单的声明。但是如果我们将a 重新声明到与以下相同的范围内:
int a;
int a;
我们有
test.cpp:4:5: error: redefinition of ‘int a’
test.cpp:3:5: error: ‘int a’ previously declared here
那么int a 到底是什么?
【问题讨论】:
-
标准的哪一部分规定您可以在同一范围内对同一变量执行两次声明?
-
@merlin2011 我认为问题是,是什么让
int a;在这种情况下成为定义。它必须是一个定义才能打破 ODR 规则。 -
@user2357112 我不明白,这种情况下是否适用ODR?
-
这是一个简单的编程逻辑,如果你想存储整数值,你必须声明一个变量来为此创建一个内存位置。现在该位置由变量“a”标识。所以现在你不能为新的 int 内存位置声明相同的变量。
-
@JitendraPareek 我对这个问题的编程不感兴趣。我想在标准中找到正式的规则。
标签: c++ declaration definition