这是真的 ?
1.如果我们单独使用 const 修饰符,它默认为 int。例如,
const size = 10;
方法
const int size =10;
2.ANSI C 不需要 const 的初始化器;如果没有给出,它会将 const 初始化为 0。例如,
const int i;
方法
const i = 0;
请给出答案。根据 ANSI 标准
C89/90 也是如此。这不适用于 C99 或 C++。“隐式 int”规则在 C99 中被禁止,并且在 C++ 中从未存在过。
然而,
const size 10;
不是有效的 C 语法。=
仍然是必需的。一个非常古老的 C 预标准版本(称为 CRM C)使用没有 的初始化语法=
,但该版本的语言甚至还const
没有。
不对。在 C 中,具有静态存储持续时间的对象默认为零初始化。这意味着,例如,任何文件范围对象默认为零初始化,无论是否初始化const
。默认情况下,局部变量不进行零初始化,不管它们是否是const
。换句话说,这个问题与const
.
C++ 实现了类似的规范。在任何其他初始化发生之前,所有具有静态存储持续时间的对象都被初始化为零。
根据标准(C99,我没有检查 C++ 或更早的 C 版本),这些都不是真的。
如果您查看声明的语法定义(第 6.7 节),您会发现类型说明符不是可选的。
在默认初始化(第 6.7.8 节)中,我们发现以下内容:
如果具有自动存储持续时间的对象未显式初始化,则其值是不确定的。如果具有静态存储持续时间的对象未显式初始化,则:
...
- 如果它具有算术类型,则将其初始化为(正或无符号)零;
...
这里什么都没有const
。
http://ideone.com/kl9CZ不,这不是真的。
C 允许 default int
,但直到 1999 年,他们才将其定为非法。很久以前,变量int
在 MSVC 2003 的 C++ 中默认为,但在标准 C++ 中,自从语言标准化以来,这一直是非法的。事实上,当我将代码输入到最新版本的 MSVC 中时,我会收到错误消息:
错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数
据我所知,=
在 C 或 C++ 中省略 是不合法的。
在某些情况下,C 和 C++ 会将变量初始化为零,但在某些情况下,您有一些类似的东西int a = int();
,并且全局/静态变量是零初始化的。在您的代码中,(如果它们在函数中)C 和 C++ 都不会对这些变量进行零初始化。