我有这个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++中的含义是什么:
零初始化,
默认初始化,和
值初始化
C++开发人员应该了解他们什么?
我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)
编译器警告我,我是未定义的,当我运行程序时,它通常不为零.
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上测试过它.
我在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) 隐式默认构造函数具有空主体和空初始化列表(原始类型未定义,并且为用户定义的类型调用默认构造函数).
这篇帖子说
MyClass *c = new MyClass();
Run Code Online (Sandbox Code Playgroud)
确实做了一个成员方面的值初始化,但是在做什么时调用默认构造函数是什么意思
MyClass c;
Run Code Online (Sandbox Code Playgroud)
?
是否调用了隐式默认构造函数,以确保调用用户定义类型(可能具有非平凡的默认构造函数)的默认构造函数?
更新
似乎在调用编译器生成的隐式默认构造函数之后,可能无法一致地实例化对象,即原始类型未定义,并且用户定义的类型可能(或可能不)处于已知状态,具体取决于程序员是否提供了默认构造函数.
那么为什么编译器会生成一个隐式的默认构造函数,当调用它时可能会实例化一个未知状态的对象?
我正在进行合并排序功能.我得到了排序 - 我试图让我的合并部分完成.假设我正在学习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值.我只是想知道这是否常见,容易出错,还是只是风格不好.如果是这样,你会如何
我有这样的结构:
/* 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) 我正在学习构造函数,我需要澄清一下.我可以在不指定构造函数的情况下构建结构如下:
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++ ×10
constructor ×3
c++-faq ×1
class ×1
compilation ×1
const ×1
declaration ×1
dictionary ×1
functor ×1
iterator ×1
loops ×1
pointers ×1
stl ×1
struct ×1
variables ×1
vector ×1