C++ ANSI C和ANSI C+中的常量修饰符+;

C++ ANSI C和ANSI C+中的常量修饰符+;,c++,c,ansi-c,C++,C,Ansi C,这是真的吗 1.如果我们单独使用常量修饰符,它默认为int。例如 const size = 10; 意味着 const int size =10; const i = 0; 2.ANSI C不需要初始值设定项来const;如果未给出任何值,则将常量初始化为0。比如说, const int i; 意味着 const int size =10; const i = 0; 请根据ANSI STD < P>根据标准(C99,我没有检查C++或较早的C版本),这两个都不是真的。 如果查看

这是真的吗

1.如果我们单独使用常量修饰符,它默认为int。例如

const size = 10;
意味着

const int size =10; 
const i = 0;
2.ANSI C不需要初始值设定项来const;如果未给出任何值,则将常量初始化为0。比如说,

const int i;
意味着

const int size =10; 
const i = 0;
请根据ANSI STD

< P>根据标准(C99,我没有检查C++或较早的C版本),这两个都不是真的。
  • 如果查看声明的语法定义(第6.7节),您会发现类型说明符不是可选的

  • 关于默认初始化(第6.7.8节),我们发现:

    如果未初始化具有自动存储持续时间的对象 显然,它的值是不确定的。如果对象具有静态 未明确初始化存储持续时间,则:

    • 如果它有算术类型,则初始化为(正或无符号)零

    这里没有关于常量的内容

  • 不,这不是真的

    C允许使用默认值
    int
    ,但直到1999年才生效,当时他们将其定为非法。很久以前,MSVC 2003的C++中变量默认为“代码> int <代码>,但是在标准C++中,这是非法的,因为语言是标准化的。事实上,当我在MSVC的最新版本中键入您的代码时,会收到错误消息:

    错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认INT/P> 据我所知,在C或C++中,排除<代码>=/COD>从来都是不合法的。 <> P.>有些情况下,C和C++将初始化变量为零,但它们是沿着“代码> int int=int())行的一些情况;代码>,全局/静态为零初始化。在代码中,(如果它们处于函数中),C和C++都不会初始化这些变量。

  • 这对于C89/90来说是正确的。这对于C99或C++是不正确的。“隐式int”规则在C99中被禁止,在C++中从未存在过。 但是,

    const size 10;
    
    不是有效的C语法。仍然需要
    =
    。一个非常古老的标准前版本的C(称为CRM C)使用了没有
    =
    的初始化语法,但该语言版本甚至还没有
    常量

  • 不是真的。在C中,具有静态存储持续时间的对象默认为零初始化。这意味着,例如,任何文件范围对象在默认情况下都是零初始化的,不管它是否为
    const
    。默认情况下,局部变量不是零初始化的,无论它们是否为常量。换句话说,这个问题与
    const
    完全无关

    C++实现了类似的规范。所有具有静态存储持续时间的对象在进行任何其他初始化之前都是零初始化的


  • 你在参加考试还是什么?在
    常量大小10
    =
    发生了什么事?您的问题似乎是关于缺少的
    int
    。你为什么删除<代码> = />代码?在C++中,这个代码也不编译。