可能重复:
类型名称后的括号是否与new有所不同?
所以我在我的主要:
Class* pC = new Class;
Run Code Online (Sandbox Code Playgroud)
它的工作原理是
Class* pC = new Class();
Run Code Online (Sandbox Code Playgroud)
我今天才意识到我省略了括号(所以我在某种程度上被最令人烦恼的解析的"对立"所击中).
我的问题:这两种形式是否相同?
class base {
int i;
public:
base()
{
i = 10;
cout << "in the constructor" << endl;
}
};
int main()
{
base a;// here is the point of doubt
getch();
}
Run Code Online (Sandbox Code Playgroud)
base a 和之间有什么区别base a()?
在第一种情况下,构造函数被调用但不是在第二种情况下!
我刚遇到这个问题
error: request for member ‘show’ in ‘myWindow’, which is of non-class type ‘MainGUIWindow()’
Run Code Online (Sandbox Code Playgroud)
当试图编译一个简单的qt应用程序时:
#include <QApplication>
#include "gui/MainGUIWindow.h"
int main( int argc, char** argv )
{
QApplication app( argc, argv );
MainGUIWindow myWindow();
myWindow.show();
return app.exec();
}
Run Code Online (Sandbox Code Playgroud)
我通过替换解决了这个问题
MainGUIWindow myWindow();
Run Code Online (Sandbox Code Playgroud)
通过
MainGUIWindow myWindow;
Run Code Online (Sandbox Code Playgroud)
但我不明白其中的区别.我的问题:有什么区别?
此致,德克
如果我有一个班级,例如:
class Info
{
int x;
int y;
};
Run Code Online (Sandbox Code Playgroud)
我曾经创建过一个对象,
Info *p = new Info();
Run Code Online (Sandbox Code Playgroud)
Info旁边的括号是否意味着我正在初始化它?它与此Info *p = new Info;有何不同?
我知道有一个问题可以区分新旧C++语言中的不同含义,但我想知道默认值和值初始化之间的语义差异,例如,值初始化是否意味着将某些内容初始化为零?
快速初学者的问题:
我是否必须初始化简单的类成员变量,或者它们是否保证在任何情况下都被赋予默认值?
例:
class Foo {
int i;
// is i==0 or do I need the following line for that?
Foo() : i(0) {}
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
一个小时前我在这里发了一个答案,根据我的说法是正确的.然而我的回答却被Martin B贬低了.他说
你很幸运,并且因为我所处的内存恰好是零初始化而得到了零.标准不保证这一点.
然而读迈克尔·伯尔的回答后,这里并尝试下面的示例代码
1)
#include <cassert>
struct B { ~B(); int m; };
int main()
{
B * b = new B();
assert(b->m == 0);
}
Run Code Online (Sandbox Code Playgroud)
我在MSVC++ 2010上遇到调试错误.
我有一个类似的错误,当我尝试下面的代码[我的答案在这里 ]在MSVC++ 2010
2)
#include <cassert>
struct Struct {
std::string String;
int Int;
bool k;
// add add add
};
struct InStruct : Struct
{
InStruct() : Struct() {}
};
int main()
{
InStruct i;
assert(i.k == 0);
}
Run Code Online (Sandbox Code Playgroud)
既没有(1)也没有(2)给gcc/Clang这样的错误让我想到MSVC++ …
来自C背景,我一直认为POD类型(例如整数)从未在C++中自动进行零初始化,但似乎这是完全错误的!
我的理解是,只有'裸'非静态POD值不会被填零,如代码片段所示.我做对了,还有其他重要的案例我错过了吗?
static int a;
struct Foo { int a;};
void test()
{
int b;
Foo f;
int *c = new(int);
std::vector<int> d(1);
// At this point...
// a is zero
// f.a is zero
// *c is zero
// d[0] is zero
// ... BUT ... b is undefined
}
Run Code Online (Sandbox Code Playgroud) 我正在读这个答案,所以我遇到了第二个字:value-initialize.最初我认为这是相同的,default-initialize但上下文暗示我错了.
所以我的问题是:
default-initialize和value-initialize有什么区别?
我想了解一些例子的不同之处.
如果我们写下这样的话:
int *arr = new int[5];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,系统为5个类型的元素动态分配空间,int并返回指向序列的第一个元素的指针.
但是,一旦我看到以下代码:
int *arr = new int[5]{};
Run Code Online (Sandbox Code Playgroud)
那么,运营商{}之后的意义new何在?{}这段代码的目的是什么?
我用自己的值初始化了数组,如下所示:
#include <iostream>
int main()
{
int* a = new int[5]{1};
for(int i = 0; i < 5; i++)
std::cout<< a[i]<<' ';
delete[] a;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
只有第一个元素打印1.为什么?
c++ initialization new-operator dynamic-memory-allocation c++11
愚蠢的问题,但每当你打电话给新的时,你总是有指针吗?
SomeClass *person = new SomeClass();
Run Code Online (Sandbox Code Playgroud)
那是因为你需要一个指向指向为SomeClass变量人分配的新内存空间的指针吗?谢谢!
c++ ×10
constructor ×2
new-operator ×2
c++11 ×1
class ×1
parsing ×1
pointers ×1
qt ×1
variables ×1
visual-c++ ×1