n 1 k z z z Asked:2022-06-03 16:01:04 +0800 CST2022-06-03 16:01:04 +0800 CST 2022-06-03 16:01:04 +0800 CST C++中的动态初始化 772 我最近在这里读到,同一个变量可以在静态初始化后动态初始化。这是真的?如果是这样,是否可以将变量初始化 2 次?原来在第二次初始化的时候,发生的不是初始化,而是赋值 c++ 1 个回答 Voted Best Answer wololo 2022-06-03T22:24:49+08:002022-06-03T22:24:49+08:00 我最近在这里读到,同一个变量可以在静态初始化后动态初始化。这是真的?如果是这样,是否可以将变量初始化 2 次? 是的,这是正确的。是的,一个变量可以被初始化两次。 这更像是一个术语问题:将第二次初始化称为初始化是否正确......语言标准说,在程序执行开始时,具有静态存储类的变量会进行静态初始化(静态初始化)。然后,它们可以在程序执行期间额外进行动态初始化。 在实践中很可能检测到双重初始化的事实。basic.start.static/注2: #include <iostream> using std::cout; using std::endl; inline double fd() { return 1.0; } extern double d1; double d2 = d1; // unspecified: // may be statically initialized to 0.0 or // dynamically initialized to 0.0 if d1 is // dynamically initialized, or 1.0 otherwise double d1 = fd(); // may be initialized statically or dynamically to 1.0 int main() { cout << "d1: " << d1 << endl; cout << "d2: " << d2 << endl; } 该程序的输出(g++,clang): d1: 1 d2: 0 观察到的行为可以解释如下。 变量d1和d2静态初始化为零。 然后使用变量( )d2的值动态初始化该变量。d1double d2 = d1; 最后,变量d1由函数调用的结果动态初始化fd(double d1 = fd();)。 然而,这里的一切都不是那么简单。如果我们不考虑变量d2,那么代码 inline double fd() { return 1.0; } double d1 = fd(); 基本上相当于这段代码: double d1 = 1.0; 变量的动态初始化d1可以用静态初始化代替,d1而不改变变量的值。语言标准明确允许这种替换。请参阅:basic.start.static/3。在静态初始化步骤期间,d1可以为变量分配一个值1.0而不是0.0. 那些。观察到的行为可能是这样的: 一个变量d1用一个值静态初始化,1.0一个变量d2用一个值静态初始化0.0。 然后使用变量d2的值动态初始化变量d1(即也采用 的值1.0)。 最后,由于变量d2最终被分配了一些非常具体的值,在编译阶段就知道了,它和变量一样d1,可能不是动态初始化的,而只是静态初始化的。 像这样的东西。
是的,这是正确的。是的,一个变量可以被初始化两次。
这更像是一个术语问题:将第二次初始化称为初始化是否正确......语言标准说,在程序执行开始时,具有静态存储类的变量会进行静态初始化(静态初始化)。然后,它们可以在程序执行期间额外进行动态初始化。
在实践中很可能检测到双重初始化的事实。basic.start.static/注2:
该程序的输出(g++,clang):
观察到的行为可以解释如下。
d1
和d2
静态初始化为零。d2
的值动态初始化该变量。d1
double d2 = d1;
d1
由函数调用的结果动态初始化fd
(double d1 = fd();
)。然而,这里的一切都不是那么简单。如果我们不考虑变量
d2
,那么代码基本上相当于这段代码:
变量的动态初始化
d1
可以用静态初始化代替,d1
而不改变变量的值。语言标准明确允许这种替换。请参阅:basic.start.static/3。在静态初始化步骤期间,d1
可以为变量分配一个值1.0
而不是0.0
. 那些。观察到的行为可能是这样的:d1
用一个值静态初始化,1.0
一个变量d2
用一个值静态初始化0.0
。d2
的值动态初始化变量d1
(即也采用 的值1.0
)。最后,由于变量
d2
最终被分配了一些非常具体的值,在编译阶段就知道了,它和变量一样d1
,可能不是动态初始化的,而只是静态初始化的。像这样的东西。