当我使用初始化列表时:
struct Struct {
Struct() : memberVariable() {}
int memberVariable;
};
Run Code Online (Sandbox Code Playgroud)
基本类型(int
,bool
,float
,enum
,指针)成员变量是默认-initialied.是实现定义的值还是所有实现都相同?
我想知道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();
,这有关系吗?
我有以下内容
char mem_pool[1024*1024*64];
int main() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我试图彻底了解如何mem_pool
初始化.经过大量的搜索,我的结论是:
static
关键字中,而是在"在程序之前运行 - 在静态初始化阶段")char ar[N]
在函数作用域中所做的那样),而是一个零数组.有人可以帮助我消除语言所保证的内容,如果我错了,还要纠正我吗?
我还想过做以下任何事情
char mem_pool[1024*1024*64] {};
char mem_pool[1024*1024*64] = "";
Run Code Online (Sandbox Code Playgroud)
我怀疑这是一个更好/推荐的做法,但现在我需要了解我的初步问题.
关于Scot Meyers的"Effective C++"和第4项:非本地静态对象在使用之前可以是未初始化的(静态在这种情况下意味着"全局",具有静态生命).如果将其替换static
为在返回对它的引用的函数内创建的local- 对象,则在使用之前确定该对象已初始化.
我总是有一个常量文件.我extern const int a;
在.hpp文件中声明并在.cpp文件中定义它.但那么同样的事情会发生吗?a
可以是未初始化的.或不?同样的规则是否适用于内置类型?
#include <iostream>
using namespace std;
struct A {
// Some Other Code
int x;
};
A a1;
int main(){
A a2;
cout << "a1.x = " << a1.x << endl;
cout << "a2.x = " << a2.x << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C++14 标准 (ISO/IEC 14882:2014) 第 8.5 节,第 12 段:
如果没有为对象指定初始化程序,则该对象是默认初始化的。当获得具有自动或动态存储期限的对象的存储时,该对象具有不确定值,如果没有对该对象执行初始化,则该对象保留一个不确定值,直到该值被替换(5.17)。[注意:具有静态或线程存储持续时间的对象是零初始化的,参见 3.6.2。- 尾注]
那么a1
有静态存储持续时间和a2
自动存储持续时间吗?的定义Struct A
在全局命名空间以及a1
声明中,而a2
声明在块范围内(在main()
函数内部)。
此外,第 3.6.2 节说:
第 1 段:
作为程序启动的结果,具有静态存储持续时间的非局部变量被初始化。
第 2 段: …