首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >int a是什么意思?

int a是什么意思?
EN

Stack Overflow用户
提问于 2014-05-14 14:09:09
回答 4查看 498关注 0票数 0

正如在标准中指定的,int a属于简单的declaration。实际上

代码语言:javascript
复制
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重新声明为与以下相同的作用域:

代码语言:javascript
复制
int a;
int a;

我们有

代码语言:javascript
复制
test.cpp:4:5: error: redefinition of ‘int a’
test.cpp:3:5: error: ‘int a’ previously declared here

那么int a到底是什么呢?

EN

回答 4

Stack Overflow用户

发布于 2014-05-14 14:12:37

它们在语法上都是有效的声明,但是这两个语句一起违反了one definition rule。编译器检测并报告此冲突。(它们都是声明和定义。)

票数 9
EN

Stack Overflow用户

发布于 2014-05-14 14:13:47

来自于标准

代码语言:javascript
复制
A declaration is a definition unless it declares a function without specifying the function’s body

a不是一个方法,所以int a意味着一个声明和定义。如果您在一个翻译单元中多次定义一个名称,您就违反了One definition Rule,因此出现了错误。

编辑

为了澄清,我发布了整个段落:

声明是一个定义,除非它声明了一个函数而没有指定函数体(8.4),它包含外部说明符(7.1.1)或链接规范(27) (7.5)并且既不是初始化器也不是函数体,它在类定义中声明静态数据成员(9.4),它是类名声明(9.1),或者是类型定义声明(7.1.3),使用声明(7.3.3),或使用指令(7.3.4)。

票数 6
EN

Stack Overflow用户

发布于 2014-05-14 14:42:49

就像两个人的名字一样。编译器会混淆引用哪一个。所以在同一范围内是不允许的。让两个变量具有相同的名称会让编译器感到困惑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23646847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档