Pav*_*kin 2 c++ initialization language-lawyer
C++17 (N4713),C.1.2 第 6 条:基本概念,1:
\n\n\n更改:C++ 没有像 C 中那样的 \xe2\x80\x9ctentative 定义\xe2\x80\x9d。
\n理由:这避免了基本类型和用户定义类型具有不同的初始化规则。
\n
问题:基本类型和用户定义类型的初始化规则有何不同?有什么例子吗?
\n额外:以下是 C 中相互引用的文件本地静态对象:
\nstruct X { int i; struct X* next; };\nstatic struct X a;\nstatic struct X b = { 0, &a };\nstatic struct X a = { 1, &b };\nRun Code Online (Sandbox Code Playgroud)\n在 C++ 中,此代码无效。如何在C++中实现同样的效果?
\n声明具有文件作用域的事物的首选方法是匿名命名空间。里面的所有内容namespace {}都有文件范围。您可以声明函数、类、变量等,extern就像平常声明一样a。
请注意,在 C++ 中不需要编写struct X
struct X { int i; X* next; };
namespace {
extern X a;
X b = { 0, &a };
X a = { 1, &b };
}
Run Code Online (Sandbox Code Playgroud)