【问题标题】:const modifiers In ANSI C and ANSI C++ [closed]ANSI C 和 ANSI C++ 中的 const 修饰符 [关闭]
【发布时间】:2012-07-16 16:24:45
【问题描述】:

这是真的吗?

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

const size = 10;

表示

const int size =10; 

2.ANSI C 不需要 const 的初始化器;如果没有给出,它会将 const 初始化为 0。例如,

const int i;

表示

const i = 0;

请给出答案。根据ANSI标准

【问题讨论】:

  • 你参加考试还是什么?
  • =const size 10 中发生了什么?您的问题似乎是关于缺少的int。为什么你也删除了=

标签: c++ c ansi-c


【解决方案1】:
  1. C89/90 也是如此。这不适用于 C99 或 C++。 “隐式 int”规则在 C99 中被禁止,并且在 C++ 中从未存在过。

    然而,

    const size 10;
    

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

  2. 不正确。在 C 中,具有 静态存储持续时间 的对象默认为零初始化。这意味着,例如,任何 file-scope 对象默认为零初始化,无论它是否为const。局部变量默认不进行零初始化,不管它们是否为const。也就是说,这个问题与const完全无关。

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

【讨论】:

    【解决方案2】:

    http://ideone.com/kl9CZ不,这不是真的。

    C 允许默认 int,但直到 1999 年,他们才将其设为非法。很久以前,MSVC 2003 的 C++ 中的变量默认为 int,但在标准 C++ 中,自从语言标准化以来,这一直是非法的。事实上,当我将您的代码输入到最新版本的 MSVC 中时,我会收到错误消息:

    错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int

    据我所知,省略 = 在 C 或 C++ 中是不合法的。

    一些情况下,C 和 C++ 会将变量初始化为零,但在这些情况下,您有类似 int a = int(); 的内容,并且全局变量/静态变量被初始化为零。在您的代码中,(如果它们在函数中)C 和 C++ 都不会对这些变量进行零初始化。

    【讨论】:

      【解决方案3】:

      根据标准(C99,我没有检查过 C++ 或更早的 C 版本),这些都不是真的。

      1. 如果查看声明的语法定义(第 6.7 节),您会发现类型说明符不是可选的。

      2. 在默认初始化时(第 6.7.8 节),我们发现以下内容:

        如果具有自动存储持续时间的对象未初始化 明确地说,它的值是不确定的。如果一个物体有静电 存储时长未显式初始化,则:

        ...

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

        ...

        这里没有关于 const 的内容。

      【讨论】:

      • 在 C++ 中,此代码也无法编译。
      猜你喜欢
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 2011-09-26
      • 2014-07-18
      • 2015-01-24
      相关资源
      最近更新 更多