这是真的吗?
1.如果我们单独使用const修饰符,则默认为int。例如,
const size = 10;
表示
const int size =10;
2.ANSI C不需要const的初始化器;如果没有给出,则将const初始化为0.例如,
const int i;
表示
const i = 0;
请给ans。根据ANSI标准
答案 0 :(得分:3)
C89 / 90就是这样。对于C99或C ++,情况并非如此。 “隐含int”规则在C99中是非法的,在C ++中从未存在过。
然而,
const size 10;
是无效的C语法。 =
仍然是必需的。一个非常古老的预标准版本的C(称为CRM C)使用了初始化语法而没有=
,但该版本的语言中还没有const
。
不正确。在C中,具有静态存储持续时间的对象默认为零启动。这意味着,例如,默认情况下,任何文件范围对象都是零初始化的,无论它是否为const
。默认情况下,局部变量不会进行零初始化,无论它们是否为const
。换句话说,此问题与const
完全无关。
C ++实现了类似的规范。在进行任何其他初始化之前,静态存储持续时间的所有对象都将进行零初始化。
答案 1 :(得分:1)
根据标准(C99,我没有检查过C ++或更早的C版本),这些都不是真的。
如果查看声明的语法定义(第6.7节),您会发现类型说明符不是可选的。
在默认初始化(第6.7.8节)中,我们发现以下内容:
如果未初始化具有自动存储持续时间的对象 显然,它的价值是不确定的。如果一个对象有静态 存储持续时间未明确初始化,然后:
...
- 如果它有算术类型,则初始化为(正数或无符号)零;
...
这里没有const
。
答案 2 :(得分:1)
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 ++都不会将这些变量初始化为零。