如果我的理解是正确的,以下语义适用于 C++、C# 和 D 中的结构和类:
struct class
----------------------------------
C++ stack/heap stack/heap
value/reference value/reference
C# / D stack heap
value reference
即,在 C++ 中,结构和类之间没有语义差异(除了默认的公共/私有访问)。相比之下,C# 和 D 结构具有值语义和堆栈分配(至少在默认情况下),而 C# 和 D 类具有引用语义和堆分配。
我的问题是:将 struct 关键字专门用于所有具有值语义的实体,将 class 关键字专门用于所有具有引用语义的实体来模仿这种差异是否是一种好的 C++ 风格?
它当然是一个编译器不强制执行的自律工具,但它可以提高代码的可读性,尤其是对于具有 C#/D 背景的审阅者。OTOH,C++ 中的当前习惯用法似乎只对简单实体使用 struct 关键字,例如纯 POD 聚合和模板元函数,因此它可能会让 C++ 程序员感到困惑。