相关疑难解决方法(0)

是否默认将C++结构的成员初始化为0?

我有这个struct:

struct Snapshot
{
    double x; 
    int y;
};
Run Code Online (Sandbox Code Playgroud)

我希望x并且y为0.默认情况下它们是0还是我必须这样做:

Snapshot s = {0,0};
Run Code Online (Sandbox Code Playgroud)

将结构归零的其他方法是什么?

c++

189
推荐指数
5
解决办法
14万
查看次数

以下短语在C++中的含义是什么:零,默认和值初始化?

以下短语在C++中的含义是什么:

  • 零初始化,

  • 默认初始化,和

  • 值初始化

C++开发人员应该了解他们什么?

c++ initialization c++-faq

183
推荐指数
2
解决办法
3万
查看次数

STL映射是否在插入时初始化基元类型?

std::map喜欢这样的:

map<wstring,int> Scores;
Run Code Online (Sandbox Code Playgroud)

它存储球员的名字和分数.当有人获得分数时,我会这样做:

Scores[wstrPlayerName]++;
Run Code Online (Sandbox Code Playgroud)

当在用钥匙将地图元素没有wstrPlayerName它会创建一个,但它的增量前初始化为零或为空,或者它未定义?

我应该每次在增量之前测试元素是否存在吗?

我只是想知道,因为我认为原始类型的东西在创建时总是未定义的.

如果我写的东西如下:

int i;
i++;
Run Code Online (Sandbox Code Playgroud)

编译器警告我,我是未定义的,当我运行程序时,它通常不为零.

c++ dictionary stl initialization primitive-types

43
推荐指数
3
解决办法
9932
查看次数

为什么调用带有未声明变量的仿函数有效?

class foo {
    public:
    bool operator () (int & i) {
        return true;
    }
};

int main() {
    foo(WhyDoesThisCompile);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当传递WhyDoesThisCompile(没有空格)到仿函数时,程序编译.

为什么是这样?我在clang 4.0.0上测试过它.

c++ compilation functor most-vexing-parse

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

什么导致了产量的差异?

在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
查看次数

C++隐式默认构造函数有什么意义?

隐式默认构造函数具有空主体和空初始化列表(原始类型未定义,并且为用户定义的类型调用默认构造函数).

这篇帖子

MyClass *c = new MyClass();
Run Code Online (Sandbox Code Playgroud)

确实做了一个成员方面的值初始化,但是在做什么时调用默认构造函数是什么意思

MyClass c;
Run Code Online (Sandbox Code Playgroud)

是否调用了隐式默认构造函数,以确保调用用户定义类型(可能具有非平凡的默认构造函数)的默认构造函数?


更新

似乎在调用编译器生成的隐式默认构造函数之后,可能无法一致地实例化对象,即原始类型未定义,并且用户定义的类型可能(或可能不)处于已知状态,具体取决于程序员是否提供了默认构造函数.

那么为什么编译器会生成一个隐式的默认构造函数,当调用它时可能会实例化一个未知状态的对象?

c++ constructor

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

你可以在C++中嵌入循环(在彼此中)

我正在进行合并排序功能.我得到了排序 - 我试图让我的合并部分完成.假设我正在学习C++,对指针有粗略的了解,并且不了解std :: vector :: iterator的所有规则(或std :: vector's).

假设num是从大小为"int ar [num]"的数组中复制(std :: copy)值的原始std :: vector的大小.假设farray的值为(0到(num/2)),sarray的值为((num/2)到num).

int num = original.size();
std::vector<int> final(num);

for (std::vector<int>::iterator it = farray.begin(); it != farray.end(); ++it) {
     for (std::vector<int>::iterator iter = sarray.begin(); iter != sarray.end(); ++iter) {
         if (*it > *iter) final.push_back(*it);
          else
               final.push_back(*iter);
     }
}
Run Code Online (Sandbox Code Playgroud)

这段代码编译,我的最新稳定版本的Bloodshed Dev-C++不会抛出任何警告或错误.我不知道这是否有效,我仍然需要尝试cout所有的final值.我只是想知道这是否常见,容易出错,还是只是风格不好.如果是这样,你会如何

c++ pointers iterator loops vector

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

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

为什么在这种情况下不隐式生成operator =和copy-constructor?

我有这样的结构:

/* Renderable definition */
    struct Renderable
    {
        Renderable(VertexBufferPtr vertexBuffer, const Mat4& wvpMatrix, const Mat4& worldMatrix, const Vec4& diffuseColor, const float specularFactor) : 
                    mVertexBuffer(vertexBuffer), mTransform(wvpMatrix, worldMatrix), mMaterial(diffuseColor, specularFactor)
        {
        }

        /* Transform definition */
        struct Transform
        {
            Transform(const Mat4& wvpMatrix, const Mat4& worldMatrix) : mWVPMatrix(wvpMatrix), mWorldMatrix(worldMatrix)
            {
            }

            const Mat4 mWVPMatrix;
            const Mat4 mWorldMatrix; 
        };

        /* Material definition */
        struct Material
        {
            Material(const Vec4& diffuseColor, const float specularFactor) : mDiffuseColor(diffuseColor), mSpecularFactor(specularFactor)
            {
            }

            const Vec4 mDiffuseColor;
            const float mSpecularFactor;
        }; …
Run Code Online (Sandbox Code Playgroud)

c++ constructor compiler-errors const copy-constructor

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

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

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

 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
查看次数