"semantics" 是什么意思?为什么 "move semantics" 如此命名,而不是任何其他术语?
What does "semantics" mean? and why are "move semantics" named as such, instead of any other term?
在cpp中,对象的“移动语义”指的是“将对象移动而不是复制到更新的对象”的概念,但是“语义”这个词真的让我很困惑。
“语义”和“功能”有什么区别?
如何正确使用这个词?
如果我实现了一个名为“max(A,B)”的方法,我们可以说“我实现了最大语义”吗?
如果我编写一个名为“列表”的对象,我们可以说“我实现了一个序列存储语义”吗?
“语义”是意思或书面说明的解释。它通常与描述指令的形式的“语法”相对照。例如,赋值 foo = bar
在许多编程语言中具有相同的形式,但不一定具有相同的含义。在 C++ 中表示复制,在 Rust 中表示移动,在 Java 或 Python 中表示复制对象引用。
应用于 C++ 语法(例如向函数赋值或传递参数)的“移动语义”意味着该语法是或可以被解释为对象移动而不是对象复制。语义不是“功能”的同义词,因此“max
语义”没有多大意义。
可以应用该词的其他示例是 reference semantics 而不是值语义,或者是“短路语义”(&&
和 ||
运算符)评估所有条款。基本上,任何你写的东西有多种可能的含义,你需要说出并指出正确的一个。
在cpp中,对象的“移动语义”指的是“将对象移动而不是复制到更新的对象”的概念,但是“语义”这个词真的让我很困惑。
“语义”和“功能”有什么区别? 如何正确使用这个词? 如果我实现了一个名为“max(A,B)”的方法,我们可以说“我实现了最大语义”吗? 如果我编写一个名为“列表”的对象,我们可以说“我实现了一个序列存储语义”吗?
“语义”是意思或书面说明的解释。它通常与描述指令的形式的“语法”相对照。例如,赋值 foo = bar
在许多编程语言中具有相同的形式,但不一定具有相同的含义。在 C++ 中表示复制,在 Rust 中表示移动,在 Java 或 Python 中表示复制对象引用。
应用于 C++ 语法(例如向函数赋值或传递参数)的“移动语义”意味着该语法是或可以被解释为对象移动而不是对象复制。语义不是“功能”的同义词,因此“max
语义”没有多大意义。
可以应用该词的其他示例是 reference semantics 而不是值语义,或者是“短路语义”(&&
和 ||
运算符)评估所有条款。基本上,任何你写的东西有多种可能的含义,你需要说出并指出正确的一个。