2012-03-29 81 views
3

一书(由E.Balagurusamy与C++面向对象编程)说,const-keyword的默认数据类型是int型?

const size = 10; 

意味着

const int size = 10; 

但G ++编译器(版本4.6.1在Ubuntu)发出一个错误

error: ‘size’ does not name a type 

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

  1. g ++不支持该功能。
  2. 这是新功能。最新的g ++版本支持它。
  3. 该声明是错误的。数据类型是const关键字必需的。
  4. 别的东西。
+4

C的隐式'int'已经在C++ 98中被删除。 – 2012-03-29 16:47:55

回答

3

看起来像书中的错误......由于C++是强类型语言,所以您绝对必须命名类型或别名类型(即typedef)。

这里是在对象上,声明和定义的C++ 03规范规定:当对象是被确定

一个对象的属性:


1.8节/ 1创建。一个对象可以有一个名字(第3章)。一个对象具有一个影响其寿命(3.8)的存储持续时间(3.7)。 对象有一个类型(3.9)。术语对象类型指的是用于创建对象的类型。

然后在第3.1/1:

的声明是一个定义 ... [注:该段其余部分是此规则的例外,并省略了,因为他们不适用于这种情况]

然后,在第3.1节/ 6:

的程序是生病-FO Rmed指如果任何对象的定义给出了对象的不完全类型

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

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


所以根据3.9.2/1,const是限定符,不是一个类型,并且作为-这样,它具有限定一个有效的非限定类型。其次,在给出的例子中,根据3.1/1,size的声明也是一个定义,因此size对象必须具有关联的类型或程序根据3.1/6格式不合适。

+0

没有错误。它是这样说的。在一些程序示例中,他们使用了这些语句。 – 2012-03-29 16:48:58

+0

查看我的C99标准附加... – Jason 2012-03-29 16:54:51

+0

我看到我被低估了......有什么原因?如果出现了错误,我认为这有助于每个人都知道错误是什么,并修复错误,而不是简单地做一次驱车 - 倒计时。 – Jason 2012-03-29 18:14:54

5

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

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

我建议你从这个名单获得入门书:

+0

哦,天啊! C++书籍列表没有列出E.Balagurusamy的书。我们认为他的书是作为编程语言的圣经。 – 2012-03-29 17:01:52

+2

@habeebperwad如果Balagurusamy的C++书中包含一个错误,比如声称'const size'意思是'const int size',那么你应该认真地重新考虑你对他的书的看法。 – bames53 2012-03-29 17:50:54

3

我会去:该说法是错误的。数据类型对于const关键字是必需的。