C++ 中的值语义技巧
Posted
技术标签:
【中文标题】C++ 中的值语义技巧【英文标题】:value semantic tricks in C++ 【发布时间】:2011-12-08 06:11:15 【问题描述】:除了 C++(因为他有运算符重载),你知道另一种 OOP 语言可以做(或在最坏的情况下模仿)“值语义”吗?
【问题讨论】:
【参考方案1】:在 C# 中,如果您将“对象”定义为 struct
,则它具有值语义。如果您将其定义为class
,则它具有引用语义(除非您将其设为不可变,如string
,则其语义更类似于值一)。
我要补充一点,打破这种“隐含”语义很容易。
struct MyStruct
public StringBuilder SB;
MyStruct a = new MyStruct();
a.SB = new StringBuilder();
MyStruct b = a;
现在你已经破坏了语义,因为 a
和 b
“指向”同一个引用。
【讨论】:
这根本没有破坏价值语义。事实上,这正是价值语义所说的应该发生的事情。【参考方案2】:D 中的结构也具有值语义。
【讨论】:
以上是关于C++ 中的值语义技巧的主要内容,如果未能解决你的问题,请参考以下文章