今天在看《Java编程思想》(我买的第四版,中文版)这本书的时候,在书第93页部分开头,有这么一段描述:
“5.6.1 指定初始化
如果想为某个变量赋初值,该怎么做呢?有一种很直接的办法,就是在定义类成员变量的地方为其赋值(注意在C++里不能这么做,尽管C++的新手们总想这样做)。以下代码片段修改了InitialValues类成员变量的定义,直接提供了初值。“
原文是这么说的,请注意我划下划线的地方,这里的意思按我的理解是,在Java中可以在定义类成员变量的时候赋初值,但是在C++中却无法这么做,于是我将信将疑地做了个小测试。
#include<iostream>
class test
{
int num = 5;
double numbers = 1.5;
public:
void print(void)
{
std::cout << num << std::endl;
std::cout << numbers << std::endl;
}
};
int main(void)
{
test te;
te.print();
return 0;
}
我使用的是微软公司的Visual Studio 2017 社区版,在这个版本的编译器中,对于这种代码的书写是完全被接受的(编译过程甚至没有出现警告),结果十分明显,这个测试程序成功地输出了5和1.5这两个数字。
对于书中所述和实际的出入,我认为可能有以下原因:
1.本书的作者可能在写书的时候记错了
2.国内人员在翻译的时候出错(我没有本书的英文版)
3.作者写此书的时候,C++还停留在前面的几个版本,可能在旧的C++标准中并不允许类中初始化的行为,随着新标准的颁布,加入了这一语法。
4.我使用的编译器支持这类语法,但可能其他编译器不支持(正如我用C语言写代码的时候,Vs2017不支持变长数组(VLA),它将其视为错误,但在另一款编译器Dev C++中却完全支持)。
具体情况我也不清楚,如果有知情者知道的欢迎留言。