在阅读书籍时,发现对这一段内容特别陌生,特地记下来。
内容来自于 C++ Primer 5
下面的obj的声明可以正常编译通过:
Sales_data obj() // 正确,定义了一个函数而非对象
if(obj.isbn()) == primer_5th_ed.isbn()) // 错误,obj是一个函数
担当我们试图使用obj时,编译器将报错,提示我们不能对函数使用成员访问元素符。问题在于,尽管我们想声明一个默认初始化的对象,obj实际的含义缺失一个不接收任何参数的函数并且其返回值是Sales_data类型对象。
如果想顶一个使用默认构造函数进行初始化对象,正确的方法是去掉对象名之后的空地括号对:
// 正确,obj是个默认初始化的对象
Sales_data obj;
对于C++的新手程序员来说有一种常犯的错误,他们试图以如下的形式声明一个用默认构造函数初始化的对象:
Sales_data obj() // 错误,声明一个函数而非对象
Sales_data obj2 // 正确,obj2是一个对象而非函数