c++ - 模仿结构/类之间的 C#/D 差异是否是好的 C++ 风格?

标签 c++ class coding-style struct d

<分区>

如果我的理解是正确的,则以下语义适用于 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++ 程序员感到困惑。

最佳答案

如果这是唯一相关的区别,它可能是有道理的。在 实践,远不止于此。在 C++ 中,它非常频繁 对于具有真实行为(并且不支持复制)的对象 分配在堆栈上;它也时常发生,纯数据 容器动态分配。 C#和D混淆了两个 正交区别:任意对象生命周期与对象生命周期 链接到范围,以及对象是否具有值语义。 虽然这两种区别对于某些类型确实是一致的, 这不是绝对规则,将其强加于语言层面会产生 直筒夹克,有时会妨碍使用最干净和最 天然溶液。

关于c++ - 模仿结构/类之间的 C#/D 差异是否是好的 C++ 风格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10175772/

相关文章:

c++ - Xcode 10 调用不可用的函数 std::visit

c++ - 用于计算机视觉的 openmp 与 opencl

c++链接错误与类中的const成员函数

c# 从父类访问子类

html - 如何在 `class` 和 `id` 之间进行选择

php - 这是在 PHP 中创建函数/方法时的最佳实践,您使用数组还是单个变量?

php - 如果使用 PHP 登录,则更改整个站点

c++ - 在异常构造函数中参数化错误消息是一种好习惯吗?

c++ - 互锁函数 c++

c++ - 是否可以为 clang-format 创建自定义规则?