相关疑难解决方法(0)

当用于初始化"new"时,()和{}总是等效吗?

在使用new时,有一个帖子在类型名称之后处理括号或不处理括号.但是这个怎么样:

如果'Test'是一个普通的类,那么之间有什么区别:

Test* test = new Test();
// and
Test* test = new Test{};
Run Code Online (Sandbox Code Playgroud)

此外,假设Test2有一个类型参数的构造函数Value,它总是等于写:

Value v;
Test2 *test2 = new Test(v);
// and
Test2 *test2 = new Test{v};
Run Code Online (Sandbox Code Playgroud)

c++ constructor initialization new-operator c++11

8
推荐指数
3
解决办法
1651
查看次数

C静态数组初始化 - 我需要多么详细?

要使用全零来初始化int数组,我是否需要使用:

int foo[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
Run Code Online (Sandbox Code Playgroud)

或者,这将工作:

int foo[10] = {0};
Run Code Online (Sandbox Code Playgroud)

c c++ arrays

7
推荐指数
2
解决办法
1万
查看次数

动态数组分配结尾的()是什么意思?

我在一个我以前没见过的不同问题中看到了一些如下例子.

new int[m_size]();
               ^^
Run Code Online (Sandbox Code Playgroud)

我一直看到并使用过该版本new int[m_size],但最后却没有使用过().

c++ arrays memory-management

7
推荐指数
1
解决办法
197
查看次数

带括号和不带括号的C++类初始化

以下两个初始化之间有什么区别?

class Pod {
public:
    int a, b;
};

Pod *p1 = new Pod;
Pod *p2 = new Pod();
Run Code Online (Sandbox Code Playgroud)

c++ initialization

7
推荐指数
1
解决办法
1009
查看次数

C++默认构造函数不初始化指向nullptr的指针?

我想知道A*我的课程中是否有成员,nullptr如果我有这种形式的班级构造函数,我们不应该自动设置:

class MyCLass
{
    A* m_pointer;

public:
    MyCLass()
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

如果我在C++ 11中做MyCLass* o = new MyCLass;或不做 MyCLass* o = new MyCLass();,这有关系吗?

c++

7
推荐指数
1
解决办法
8500
查看次数

POD零初始化

struct Line
{
    Bounds          bounds_;
    Vector          origin_;
    uint32_t        begin_; 
    uint32_t        end_;   
    dist            ascent_;
    dist            descent_;
};
Run Code Online (Sandbox Code Playgroud)

使用如下:

Line line = {};
while (!parser.done()) {
    line = Line(); // zero-initialize
    ...
}
Run Code Online (Sandbox Code Playgroud)

Bounds并且Vector是非POD类,dist是一个typedef int64_t.

但是,VC++ 11的优化32位版本构建似乎line在while循环中至少留下了未初始化的部分内容.为什么?根据Do,括号后的类型名称与new有所区别?,它应该零初始化它,对吧?

我将struct成员的值记录到文件中:

  • after Line line = {};:非POD类型默认初始化,其他类型为0.
  • 之后line = Line();:POD类型仍默认初始化,其他包含随机值.

c++ initialization pod visual-c++ compiler-bug

6
推荐指数
1
解决办法
821
查看次数

类数据默认初始化

我有以下代码:

#include <iostream>
using namespace std;

class Base
{
private:
    int i;
    char ch;
public:
    void showdata()
    {
        cout<<"Int:"<<i<<endl;
        cout<<"Char:"<<ch<<endl;
    }
    //int pub_data ;
} ;

int main()
{
    Base ob;
    ob.showdata() ;
    //cout<<"Public Data:"<<ob.pub_data<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序编译并运行正常.输出显示i初始化为0,ch初始化为'\ 0'.
如果你注意到我在这个程序中注释了2个语句.首先声明公共数据pub_data和第二行内部主要打印这个公共数据.
现在问题是,如果我取消注释这两行,类似i,ch,pub_data的数据成员似乎没有被初始化,并且在打印时,它们显示垃圾值.
所以我的问题是公共数据与此有何不同?
我正在使用g ++ 3.4.6

c++ initialization

5
推荐指数
2
解决办法
1万
查看次数

C++ - 哪一个应该使用"新车"或"新车()"?

可能重复:
类型名称后的括号是否与new有所不同?

大家好,

class Car
{
public:
    Car() : m_iPrice(0) {}
    Car(int iPrice) : m_iPrice(iPrice) {}

private:
    int m_iPrice;
};

int _tmain(int argc, _TCHAR* argv[])
{
    Car  car1;    // Line 1
    Car  car2();  // Line 2, this statement declares a function instead.

    Car* pCar = new Car; // Line 3
    Car* pCar2 = new Car(); // Line 4

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

当我们定义Car的对象时,我们应该使用第1行而不是第2行.当我们创建一个对象时,第3行和第4行都可以通过VC8.0的编译器.但是,3号线或4号线更好的方法是什么?或者,第3行等于第4行.

谢谢

c++

5
推荐指数
1
解决办法
568
查看次数

默认初始化与值初始化

从这个答案来看,在C++ 03中,如果()省略了POD类型,则默认初始化,否则进行值初始化.

// POD type
struct foo {
     int x;
};

// value-initialized
new foo();
Run Code Online (Sandbox Code Playgroud)

但是,如果提供了用户定义的构造函数,下面的任何对象是否会被视为默认值或值初始化?

// non-POD type
struct bar {
     bar(int x = 0):x(x) {}
     int x;
};

new bar();
new bar(42);
Run Code Online (Sandbox Code Playgroud)

c++ initialization

5
推荐指数
1
解决办法
2097
查看次数

5
推荐指数
2
解决办法
440
查看次数