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