int main()
{
static const int i = 5; //both conditions for constant initialization are satisfied so that the "unless" part of your quoted statement also holds
}
struct Custom
{
constexpr Custom()
{
}
};
int main()
{
static constexpr Custom obj;//here also both conditions for constant initialization are satisfied
}
还要注意,初始化并不一定意味着必须使用构造函数。例如,在#include <string> std::string s; int main(){}中,s首先是零初始化,然后是默认初始化(使用默认ctor)。这意味着这里的第一个初始化步骤不使用任何ctor。
2条答案
按热度按时间wixjitnu1#
你能给予静态局部变量初始化为零和常量的代码示例吗?
在下面给出的例子中,局部静态变量
n
满足常量初始化的两个条件,所以这里引用语句中的“unless”部分也成立。变量或临时对象
obj
是常量初始化的,如果*或者它有一个初始化器,或者它的缺省初始化导致执行某些初始化,以及
*它的初始化全表达式是一个常量表达式,除了如果obj是一个对象,该全表达式也可以为obj及其子对象调用constexpr构造函数,即使这些对象是非文本类类型(C++11起)。
类对象(例如
MyClass obj;
)可以被零初始化或常量初始化吗?类对象也可以被常量初始化。
还要注意,初始化并不一定意味着必须使用构造函数。例如,在
#include <string> std::string s; int main(){}
中,s
首先是零初始化,然后是默认初始化(使用默认ctor)。这意味着这里的第一个初始化步骤不使用任何ctor。juzqafwq2#
根据这个https://en.cppreference.com/w/cpp/language/zero_initialization
在任何其他初始化之前,对具有静态[...]存储持续时间且不受常量初始化影响的每个命名变量执行[...]零初始化。
所以在这种情况下
a
的零初始化可以在main()
开始之前执行,但是其构造函数将如预期的那样在main()
内被调用。