【问题标题】:Dynamically initializing a static value in C vs C++ [duplicate]在C vs C ++中动态初始化静态值[重复]
【发布时间】:2020-02-16 03:35:11
【问题描述】:
#include <stdio.h>

int b(){
 return 5;
}

int main(){
 static int a = b();
 return 0;
}

以上代码无法在 C 中编译并出现此错误:

error: initializer element is not a compile-time constant

但在 C++ 中编译得很好。在 C 和 C++ 中初始化静态值有什么区别?

【问题讨论】:

标签: c++ c


【解决方案1】:

来自cppreference

在块范围内使用说明符 static 或 thread_local (C++11 起) 声明的变量具有静态或线程 (C++11 起) 存储持续时间,但在控制第一次通过它们的声明时被初始化(除非它们的初始化是零或常量初始化,可以在第一次进入块之前执行)。在所有进一步的调用中,声明被跳过。

因此,在 C 中,静态在启动时被初始化,而在 C++ 中,代码第一次通过这部分代码。 这将允许从 C++ 中的函数分配返回值,这在 C 中是不可能的,因为 C 需要在程序开始运行之前知道该值...

我希望这会有所帮助 利奥

【讨论】:

    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2011-05-22
    • 2012-05-04
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多