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

Difference between creating object with () or without(使用 () 或不使用 () 创建对象的区别)
本文介绍了使用 () 或不使用 () 创建对象的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚遇到这个问题

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

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

when trying to compile a simple qt-application:

#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;

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

but I don't understand the difference. My question: What is the difference?

问候,德克

推荐答案

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

The other answers correctly state that the parentheses version is actually a function declaration. To understand it intuitively, suppose you wrote MainGUIWindow f(); Looks more like a function, doesn't it? :) The more interesting question is what is the difference between

MainGUIWindow* p = new MainGUIWindow;

MainGUIWindow* p = new MainGUIWindow();

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

The version with parentheses is called value-initialization, whereas the version without is called default-initialization. For non-POD classes there is no difference between the two. For POD-structs, however, value-initialization involves setting all members to 0,

my2c

补充:一般来说,如果某个句法结构既可以解释为声明又可以解释为其他东西,编译器总是会以声明的方式解决歧义.

Addition: In general, if some syntactic construct can be interpreted both as a declaration and something else, the compiler always resolves the ambiguity in favor of the declaration.

这篇关于使用 () 或不使用 () 创建对象的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Rising edge interrupt triggering multiple times on STM32 Nucleo(在STM32 Nucleo上多次触发上升沿中断)
How to use va_list correctly in a sequence of wrapper functions calls?(如何在一系列包装函数调用中正确使用 va_list?)
OpenGL Perspective Projection Clipping Polygon with Vertex Outside Frustum = Wrong texture mapping?(OpenGL透视投影裁剪多边形,顶点在视锥外=错误的纹理映射?)
How does one properly deserialize a byte array back into an object in C++?(如何正确地将字节数组反序列化回 C++ 中的对象?)
What free tiniest flash file system could you advice for embedded system?(您可以为嵌入式系统推荐什么免费的最小闪存文件系统?)
Volatile member variables vs. volatile object?(易失性成员变量与易失性对象?)