“语义”是啥意思?为啥“移动语义”这样命名,而不是任何其他术语?

Posted

技术标签:

【中文标题】“语义”是啥意思?为啥“移动语义”这样命名,而不是任何其他术语?【英文标题】:What does "semantics" mean? and why are "move semantics" named as such, instead of any other term?“语义”是什么意思?为什么“移动语义”这样命名,而不是任何其他术语? 【发布时间】:2021-11-09 17:41:30 【问题描述】:

在 Cpp 中,对象的“移动语义”是指“移动但不将对象复制到较新的对象”的概念,但“语义”这个词确实让我感到困惑。

“语义”和“功能”有什么区别? 如何正确使用这个词? 如果我实现了一个名为“max(A,B)”的方法,我们可以说“我实现了一个最大语义”吗? 如果我编写一个名为“列表”的对象,我们可以说“我实现了一个序列存储语义”吗?

【问题讨论】:

语义意味着“意义”。 “移动语义”的重点不在于它做了什么,而在于它的含义。 在编程语言中,语义通常与语法相反。语法描述了哪些字符序列被认为是正确的,换句话说属于该语言。语义描述了这些“正确”字符序列的含义。 “语义”是什么意思部分是 this questionIMO 的副本。我不会投票关闭,因为它不涉及移动语义,但您应该能够毫不费力地找出“语义”的一般含义。 @Useless 谢谢你的建议。奇怪的是,在我问之前我没能找到你提到的东西。 【参考方案1】:

“语义”是书面指令的含义或解释。它通常与描述指令的形式的“语法”形成对比。例如,赋值foo = bar 在许多编程语言中具有相同的形式,但不一定具有相同的含义。在 C++ 中表示复制,在 Rust 中表示移动,在 Java 或 Python 中表示复制对象引用。

应用于 C++ 语法的“移动语义”(例如赋值或将参数传递给函数)意味着该语法被或可以被解释为对象移动,而不是对象复制。语义不是“函数”的同义词,所以“max语义”没有多大意义。

可以应用该词的其他示例是 reference semantics,而不是值语义,或“短路语义”(&&|| 运算符)而不是评估所有子句。基本上,你写的东西有多种可能的含义,你需要命名并指出正确的含义。

【讨论】:

以上是关于“语义”是啥意思?为啥“移动语义”这样命名,而不是任何其他术语?的主要内容,如果未能解决你的问题,请参考以下文章

cppcheck 是不是知道移动语义?

右值引用,移动语义,完美转发

可变引用是不是具有移动语义?

右值引用:为啥不隐式移动右值?

移动语义只是一个浅拷贝并将其他指针设置为空吗?

当基类提供时,派生类是不是需要实现移动语义?