c++ - 使用 () 或不使用创建对象的区别

标签 c++ qt most-vexing-parse

我只是遇到了问题

error: request for member ‘show’ in ‘myWindow’, which is of non-class type ‘MainGUIWindow()’

当尝试编译一个简单的 qt 应用程序时:

#include <QApplication>
#include "gui/MainGUIWindow.h"


int main( int argc, char** argv )
{
  QApplication app( argc, argv );


  MainGUIWindow myWindow();
  myWindow.show();


  return app.exec();
}

我通过替换解决了这个问题

MainGUIWindow myWindow(); 

通过

MainGUIWindow myWindow;

但我不明白其中的区别。我的问题:有什么区别?

问候, 德克

最佳答案

其他答案正确地指出括号版本实际上是一个函数声明。为了直观的理解,假设你写的 MainGUIWindow f(); 看起来更像是一个函数,不是吗? :) 更有趣的问题是两者有什么区别

MainGUIWindow* p = new MainGUIWindow;

MainGUIWindow* p = new MainGUIWindow();

带括号的版本称为值初始化,而没有括号的版本称为默认初始化。对于非 POD 类,两者之间没有区别。然而,对于 POD 结构,值初始化涉及将所有成员设置为 0,

my2c

补充:一般来说,如果某些句法构造既可以解释为声明也可以解释为其他内容,编译器总是会解决歧义,支持声明

关于c++ - 使用 () 或不使用创建对象的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116541/

相关文章:

c++ - 在 C++ 中删除此指针的行为

c++ - 继承和默认构造函数的一些问题

android - Qt/Necessitas - 合理的 QFileDialog 替换/皮肤?

c++ - 默认构造函数 C++

c++ - 将函数对象传递给构造函数

c++ - 在 C++11 中定义 lambda 函数不会在类内部编译

c++ - 计算(64 位无符号整数)*(64 位无符号整数)除以 2^64 的商

python - pyQt 相当于 asyncore/asynchat

linux - QPushButton如何使用系统主题图标 -- Linux上的Qt Designer

c++ - 为什么我不能从 C++ 向 PHP 发送多个参数?