【发布时间】:2018-01-18 06:18:59
【问题描述】:
代码如下:
int factorial(int n)
{
if ( n < 0 ) return -1; //indicates input error
else if ( n == 0 ) return 1;
else return n * factorial(n-1);
}
int const a = 10 ; //static initialization
//10 is known at compile time. Its 10!
int const b = factorial(8); //dynamic initialization
//factorial(8) isn't known at compile time,
//rather it's computed at runtime.
(盗自here)
所以对我来说为什么b 是动态初始化而a 是静态初始化是有道理的。
但是如果a 和b 具有自动存储持续时间(可能它们已在main() 中初始化),那么您还能称它们为静态或动态初始化吗?因为,对我来说,它们听起来像是一个比复制初始化更通用的初始化名称。
另外,我读过this,谁能告诉我为什么他们没有直接解释静态和动态初始化是什么?我的意思是,他们似乎只解释了它们发生在什么情况下,但也许是有原因的?
cppreference 声明初始化程序可能调用(一些初始化,如值初始化等),但在本文后面,他们提到静态和动态初始化,好像这两个是一些初始化的更通用名称。这听起来可能令人困惑,但在这里我已经说明了我的理解:
(不是最美的东西)
【问题讨论】:
-
其实
b也是静态的,因为static在C++中有不同的含义。而且它们都不是“编译时间常数”。 -
该部分称为“非局部变量”。你还需要更多的线索吗?
-
@molbdnilo 是的,虽然我已经看到了......但他们没有直接解释任何事情......好像有点模棱两可
-
相反,他们解释了所有需要知道的事情。请注意,“静态”和“动态”描述何时。 “复制初始化”是如何。
-
我打赌他们会这样做,但我不明白为什么他们不直接说明局部变量是否也可以静态或动态初始化,以及静态和动态初始化是什么的描述。正如我上面提到的,对我来说,它们似乎只说明了非局部变量发生动态和静态初始化的情况。
标签: c++