const-keyword的默认数据类型是int-type?

时间:2012-03-29 16:42:45

标签: c++ const

一本书(E.Balagurusamy用C ++进行面向对象编程)说

 const size = 10;  

表示

 const int size = 10; 

但g ++编译器(ubuntu中的版本-4.6.1)发出错误

error: ‘size’ does not name a type 

基于此我应该得出什么结论?

  1. g ++不支持该功能。
  2. 这是新功能。最新的g ++版本支持它。
  3. 陈述错了。 const 关键字必须使用数据类型。
  4. 别的。

3 个答案:

答案 0 :(得分:5)

先生。 Balagurusamy错了。完全错了。 类型是强制性的,有或没有const关键字。

你应该停止阅读这本书。你也不应该读Yashwant Kanetkar的书。我知道这些作者的书籍在印度许多大学的学生中非常受欢迎。

我建议你从这个列表中得到一本介绍性的书:

答案 1 :(得分:3)

看起来像书中的错误...你必须命名一个类型或别名类型(即typedef),因为C ++是一种强类型语言。

以下是C ++ 03规范对对象,声明和定义的陈述:


第1.8 / 1节:

  

创建对象时确定对象的属性。对象可以具有名称(第3节)。对象的存储持续时间(3.7)会影响其生命周期(3.8)。 对象的类型为(3.9)。术语对象类型是指用于创建对象的类型。

然后在3.1 / 1节中:

  

声明是定义 ... [注意:该段落的其余部分是此规则的例外,因为它们在这种情况下不适用而被省略]

然后在第3.1 / 6节:

  

如果任何对象的定义赋予对象不完整的类型

,程序就会格式不正确

最后,在第3.9.2 / 1节中,它指出:

  

...术语对象类型(1.8)包括创建对象时指定的 cv-qualifiers decl-specifier-seq const 说明符的存在声明了 const-qualified 对象类型的对象;这样的对象称为 const 对象。 ...


因此,根据3.9.2 / 1,const是限定符,而不是类型,因此,它必须限定有效的非限定类型。其次,在给出的示例中,根据3.1 / 1,size的声明也是一个定义,因此size对象必须具有关联类型,或者程序根据3.1格式不正确/ 6

答案 2 :(得分:3)

我会说:声明错了。使用const关键字时必须使用数据类型。