我在学校学习了C和一点点C ++,当我回去尝试重新使用C ++工作时,这很难,因为几乎所有我从课堂上记得的东西都是C,这显然很难用在C ++中(例如:fscanf,malloc)。令我困惑的一件事是类和构造函数。这是一个让我非常困惑的例子。
为什么这样做:
fstream a;
a.open("foo.txt", std::fstream::in | std::fstream::out);
但:
fstream a();
a.open("foo.txt", std::fstream::in | std::fstream::out);
不行吗?是不是像声明一个类型的实例一样调用默认构造函数?
答案 0 :(得分:2)
fstream a();
声明一个名为a
的函数,该函数不执行任何操作并返回fstream
个对象。编译器无法区分具有空括号的对象实例的声明与函数声明之间的区别,因此它假定它是一个函数,但如果您打开了正确的警告级别,它将发出警告。
Scott Meyers的有效C ++涵盖了这样的常见问题。我建议你阅读它以节省数小时的头部刮伤。