c++中的值语义技巧
value semantic tricks in C++
除了c++(因为他有操作符重载),你知道另一种OOP语言可以做(或者在最坏的情况下模拟)吗?"值语义" ?
在c#中,如果你将"对象"定义为struct
,它具有值语义。如果您将其定义为class
,则它具有引用语义(除非您使其不可变,如string
,否则其语义更类似于值1)。
我要补充一点,打破这种"隐式"语义是很容易的。
struct MyStruct
{
public StringBuilder SB;
}
MyStruct a = new MyStruct();
a.SB = new StringBuilder();
MyStruct b = a;
现在你已经打破了语义,因为a
和b
都"指向"同一个引用。
D中的结构体也有值语义。
相关文章:
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- Boost Spirit,获取迭代器内部语义动作
- 可以使用移动语义更改或改进此C++代码吗?
- c++在使用指针时移动语义
- 在C++17中,引用const字符串的语义应该是什么
- Xcode 语义问题引用或以前定义的代码
- 使用移动和复制语义时函数匹配如何工作?
- 将向量从 N1 缩小到 N2 项,而不触发默认构造函数并仅使用 move 语义
- 移动语义和深层/浅层复制之间有什么关系?
- 了解构造函数在移动、复制、赋值语义中的行为
- std::unique_lock移动语义
- 移动语义和运算符 + 重载
- C++ 移动语义是否在任何情况下都能节省资源?
- 移动语义在这里如何工作?
- 使用移动语义:右值引用作为方法参数
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 在C++中使用移动语义的正确方法是什么?
- C++ 价值语义、不可变性和继承性
- 移动语义 c++ 单链表