gpt4 book ai didi

c++ - 澄清没有暂定定义的理由

转载 作者:行者123 更新时间:2023-12-05 09:26:41 25 4
gpt4 key购买 nike

C++17 (N4713), C.1.2 Clause 6: basic concepts, 1:

Change: C++ does not have “tentative definitions” as in C.

Rationale: This avoids having different initialization rules for fundamental types and user-defined types.

问题:基本类型和用户定义类型的初始化规则有哪些不同?有例子吗?


额外:这是 C 中相互引用的文件本地静态对象:

struct X { int i; struct X* next; };
static struct X a;
static struct X b = { 0, &a };
static struct X a = { 1, &b };

在 C++ 中,此代码无效。如何在 C++ 中实现相同的功能?

最佳答案

用文件范围声明事物的首选方法是匿名命名空间namespace{} 中的所有内容都具有文件范围。您可以声明函数、类、变量等。extern 照常声明 a

请注意,在 C++ 中,不必编写 struct X

struct X { int i; X* next; };
namespace {
extern X a;
X b = { 0, &a };
X a = { 1, &b };
}

关于c++ - 澄清没有暂定定义的理由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73571042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com