为什么 C++ 非静态数据成员需要唯一地址?

Why C++ non-static data members require unique addresses?

最近 C++ 为 struct empty {};.

等空数据类型添加了特性 [[no_unique_address]]

拥有唯一地址对空数据成员有何好处?

为什么标准不让所有空数据成员无地址?

为什么 C++ 非静态数据成员需要唯一地址?

因为(除其他外)C 就是这样做的。如果 C++ 能够与 C 布局兼容,那么 C++ 结构的空 NSDM 必须占用与等效 C 声明相同的 space。

空基 class 优化能够添加到 C++,因为基 classes 不是 C 语言的特性,所以从来没有任何关于与 C 的兼容性的问题。如果你想允许空成员优化,您必须让 C++ 程序员明确他们是否想让优化可用(因此,该类型不直接与 C 类型兼容)。你不能只是spring他们。