int是什么意思

时间:2014-05-14 06:09:09

标签: c++ declaration definition

标准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究竟是什么?

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:6)

来自标准

A declaration is a definition unless it declares a function without specifying the function’s body

a不是方法,因此int a表示声明和定义。如果您在一个翻译单元中多次定义名称,则违反One definition Rule,因此会出错。

修改

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

  

声明是一个定义,除非声明没有的函数   指定函数的主体(8.4),它包含extern   说明符(7.1.1)或链接规范(27)(7.5),既不是   初始化器也不是函数体,它声明了一个静态数据成员   类定义(9.4),它是一个类名声明(9.1),或它   是一个typedef声明(7.1.3),一个using声明(7.3.3),或者一个   使用指示符(7.3.4)。

答案 2 :(得分:0)

与同名的两个人相同。编译器会混淆哪一个引用。因此,不允许在同一范围内。拥有两个具有相同名称的变量会让编译器感到困惑。

答案 3 :(得分:0)

我们使用声明声明变量名称和类型以及为它们定义内存。大多数情况下,这两个动作同时发生,即大多数声明都是定义(如果是变量而不是函数)。因此错误。然而,情况可能并非总是如此。