【发布时间】:2011-03-19 15:13:30
【问题描述】:
我来自 Java 背景,最近决定尝试“为了好玩”创建一个 C++ Qt GUI 应用程序。我一直在努力解决 Java 和 C++ 之间的许多细微差别,但我学到了很多东西。
我试图在我的 C++ 编码中尽可能地匹配“java 风格”的语法。虽然这可能是也可能不是 C++ 的“最佳实践”,但我觉得在学习保持熟悉且一致的语法时会有所帮助。 Java 语法遗留物之一是这样的:
//Java
MyObject o = new MyObject();
//C++
MyObject o = MyObject();
现在,我知道 C++ 有一个语法快捷方式:
//C++
MyObject o();
这很好,但正如我所说,我还不想使用不同的语法。一切正常,但当我尝试以下 Qt 代码时,我收到了一个惊喜:
QString filepath = "C:\\somefile";
QFile file = QFile(filepath);
并得到一个编译错误:
c:\QtSDK\Desktop\Qt\4.7.2\mingw\include/QtCore/qfile.h:195: error: 'QFile::QFile(const QFile&)' is private within this context
我阅读了 Qt 文档,发现确实没有公共构造函数 QFile::QFile(const QFile&)。在我的代码以前为其他类工作的地方,有这样一个构造函数。我可以在这里猜测并说那行:
QFile file = QFile(filepath);
实际上是在调用两个构造函数。谁能解释一下?
【问题讨论】:
-
只是指出一件事:在 C++ 中,像“MyObject o();”这样的声明声明一个名为 o 的函数,它不接受任何参数并返回一个 MyObject。要声明一个调用默认构造函数的 MyObject,可以执行“MyObject o;”
-
@Batchy 那么使用“MyObject o”,o 是否已完全初始化?与 Java 相比令人困惑。
-
如果
MyObject是POD ;-)