相关疑难解决方法(0)

内置类型的成员是否默认初始化?

我最近遇到了我的一个类的问题,因为我没有在构造函数初始化列表中设置指向NULL的指针,所以当我运行程序时它包含垃圾.

然而,虽然我知道在堆栈上声明但未初始化的内置类型的实例将包含随机值,但我很确定我会读到某处,因为未在构造函数初始化列表中明确放置的类成员将具有其默认值对于内置类型调用的构造函数,这也会发生,在大多数平台上插入像伪构造函数一样的代码,将它们设置为零我还认为我在某些情况下在某些情况下读到了"在C++中思考"构造对象的内存将被清零,但在两种情况下我似乎都是错误的.

请有人确认一下,
a)内置类型成员的初始化与是否定义了用户定义的构造函数有关,
b)是否需要初始化内置类型的成员手动,和
c)是否有任何情况下,在调用构造函数之前,对象的存储被清零?

此外,在研究这个问题时,我已经看到使用了"默认初始化"和"零初始化"这两个术语 - 说:

T a;
Run Code Online (Sandbox Code Playgroud)

T a();
Run Code Online (Sandbox Code Playgroud)

?我认为第一种形式只是用来防止歧义,当第二种形式可以被编译器作为函数声明.

非常感谢您的宝贵时间,

stellarpower

c++ constructor primitive-types

4
推荐指数
1
解决办法
270
查看次数

什么导致了产量的差异?

在CodinGame.com上解决了这个问题,我设法编写了一个代码,通过了最后一个测试用例的系统测试(一个非常大的测试用例).但是在我的笔记本电脑上编译我得到的输出为0而不是57330892800,代码从他们的机器给我.我用Visual Studio 2012 Express和Dev C++ 4.9.9.2编译.

我使用了一个递归函数,所以如果我的堆栈内存不足,我就会发现堆栈溢出错误,但是没有错误,没有错误,只有0的输出.为什么这会在我的系统上发生,而它工作得很好该网站的机器?什么可能导致这一点,我怀疑它是堆栈溢出?

#include<iostream>
#include<algorithm>
#include<stack>
#include<string>
#include<map>
#include<set>
#include<vector>

using namespace std;
typedef long long LONG;


string X[]={".-","-...","-.-.","-..",
            ".","..-.","--.","....",
            "..",".---","-.-",".-..",
            "--","-.","---",".--.",
            "--.-",".-.","...","-",
            "..-","...-",".--","-..-",
            "-.--","--.."};
map<string, int> dict;

string morse(const string ret){
        string s;
        for(char c : ret) s+=X[c-'A'];
        return s;
}

LONG decode(int start, string &word, vector<LONG> &mem){
        if(start == word.size()) return 1;
        else if(mem[start] != -1) return mem[start];

        LONG res = 0;
        string s;
        for(int i=0; i<19*4 && …
Run Code Online (Sandbox Code Playgroud)

c++ runtime-error

3
推荐指数
1
解决办法
631
查看次数

这两个构造函数调用之间的区别

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

我相信这个问题已经被问到了,但我找不到快速搜索.

Foo ob* = new Foo; 

Foo ob* = new Foo();
Run Code Online (Sandbox Code Playgroud)

这两种在C++中创建对象的方法有区别吗?如果没有,那么其中一个被认为是不好的做法?每个编译器都会对它进行相同的处理吗?

c++ constructor

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

结构默认构造函数:它会使用默认值来初始化我的成员,即'零'

我正在学习构造函数,我需要澄清一下.我可以在不指定构造函数的情况下构建结构如下:

 struct MyStruct {
 int member;
 }
Run Code Online (Sandbox Code Playgroud)

当我创建此结构的对象时,生成的默认构造函数将不会初始化member为默认值,除非在用户定义的构造函数中明确说明,对吗?这样:

MyStruct object;
cout<<object.member<<endl;
Run Code Online (Sandbox Code Playgroud)

将根据运行时存储在该内存地址中的内容输出一些随机值,对吗?

我的最后一个问题是,如果我没有显式地声明和定义构造函数,那么生成的构造函数会member在创建对象时初始化MyStruct还是member未初始化?

c++ constructor struct language-lawyer

0
推荐指数
1
解决办法
2305
查看次数