我有这个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++开发人员应该了解他们什么?
默认构造函数(由编译器创建)是否初始化内置类型?
c++ constructor initialization default-constructor built-in-types
快速初学者的问题:
我是否必须初始化简单的类成员变量,或者它们是否保证在任何情况下都被赋予默认值?
例:
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)
谢谢!
说我有这个班:
//Awesome.h
class Awesome
{
public:
Awesome();
private:
membertype member;
}
//Awesome.cpp
#include "Awesome.h"
Awesome::Awesome()
:member()
{
}
Run Code Online (Sandbox Code Playgroud)
如果省略member()构造函数的初始化列表中Awesome,是否会member自动调用构造函数?它是否仅在我不包含member在初始化列表中时调用?
我的问题是关于类数据成员的初始化.我想知道初始化规则,例如内置类型(int,double,float)和用户定义类型.如果我们没有初始化它们,它们的内容是未定义的,还是会使用默认的构造函数?
默认构造函数不应将任何数据成员归零。但是在某些情况下,似乎并非如此。
代码示例很简短。
#include <iostream>
using namespace std;
class Foo {
public:
int val;
Foo() = default;
};
int main() {
Foo bar;
if (bar.val != 0) {
cout << "true" << endl;
} else {
cout << "false" << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
作为例外,以上程序输出:
true
Run Code Online (Sandbox Code Playgroud)
但是,如果添加了bar数据成员的打印语句,则该var成员将被初始化为零:
...
int main() {
Foo bar;
cout << bar.val << endl;
...
}
Run Code Online (Sandbox Code Playgroud)
输出将是:
0
false
Run Code Online (Sandbox Code Playgroud)
同样,如果向类添加虚函数和析构函数Foo:
#include <iostream>
using namespace std;
class Foo {
public:
virtual void Print() …Run Code Online (Sandbox Code Playgroud) 在我的班上我使用的是这样的领域:
private:
bool firstSeqNumReceived;
Run Code Online (Sandbox Code Playgroud)
一切都工作正常一段时间但在一次提交后我发现现在true默认情况下是字段.令人惊讶的是false,默认情况下字段未初始化,而是指定的值取决于实现(有关更多详细信息,请参阅C++类成员的默认值)
现在我想知道为什么编译器不会产生编译时错误,迫使我添加初始化?谁需要"依赖于实现"的默认值,是否有任何用例?为什么不在这种情况下产生编译时错误?
我是c +的新手.我有一个简单的控制台应用程序,header.h其中包含我的课程
class MyClass
{
public:
float x, y, z;
MyClass(float x, float y, float z);
};
Run Code Online (Sandbox Code Playgroud)
我有implement.cpp我所有实现的方法,我有
MyClass::MyClass(float x, float y, float z) {};
Run Code Online (Sandbox Code Playgroud)
然后在main.cpp我尝试简单地打印值
int main()
{
MyClass One(-3.0f, 0.0f, 4.0f);
cout << "Firsth Object: " << One.x << ", " << One.y << ", " << One.z << endl;
}
Run Code Online (Sandbox Code Playgroud)
但在控制台值中打印如下:
-1.07374e + 08,-1.07374e + 08,-1.07374e + 08
我究竟做错了什么?