首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是语义学?

什么是语义学?
EN

Stack Overflow用户
提问于 2017-07-05 12:03:29
回答 3查看 4.6K关注 0票数 13

因此,有复制语义,移动语义,也许更多的语义,我不知道。我读过关于这两种语言的文章,但我对“语义”还没有一个很好的定义。顾名思义,移动语义与移动事物有关,但是为什么它被称为move 语义呢?

更清晰的版本:在编程环境中语义的含义是什么?示例:移动和复制语义。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-05 12:18:28

语义一词用于描述某事物的基本含义。

您可以说,当操作将对象状态从一个对象转移到另一个对象时,它具有移动语义。当然,在现实中,可能会复制一些指针,仅此而已,但在语义上,您的对象已经被移动了。

另一个例子是所有权转让,其中最重要的是责任(即承诺释放某种资源)。在这种情况下,从计算的角度来看,几乎什么都不会发生,但在语义上所有权是转移的。

复制语义也是如此:您可以说,将一个对象传递给一个函数具有复制语义,即您的对象将被复制,并且该函数将获得一个具有其自身生命周期的独立副本。

问题的另一个方面是语法,它是如何按照语言的规则描述您想要的内容。

C++具有非常灵活的语法重载操作符、用户定义的转换、宏等等,因此几乎任何理想的语义都可以附加到任何特定的语法中。

票数 6
EN

Stack Overflow用户

发布于 2017-07-05 12:21:37

语义学的基本意思是“的意义”。

这可能有助于看一个更熟悉的案例来解释这个词。

考虑:

代码语言:javascript
运行
复制
int a = 3;
int b = 5;

int c = a + b;

a + b的值是8,因为+操作符的语义是取其操作数的数值和。

现在考虑这一点:

代码语言:javascript
运行
复制
std::string a = "hello";
std::string b = "world";

std::string c = a + b;

a + b的值是"helloworld",因为+操作符的语义是连接它的操作数。

+运算符与std::string一起使用时,据说它具有与数值类型不同的语义

它有一个不同的,意思是

现在考虑复制和移动语义:

代码语言:javascript
运行
复制
std::string a = "hello";
std::string b;

b = a; // b receives a copy of a's value

b = std::string("hello"); // the temporary value is moved into b

我们有相同的操作符=,它有一个不同的,意思是在不同情况下的。再次,我们说is具有不同的语义

第一种情况具有复制语义,第二种情况具有移动语义。

票数 17
EN

Stack Overflow用户

发布于 2017-07-05 12:16:40

语义学是关于某事的意义的。move-semantic是关于meaning of 移动对象的。具体来说,在这种情况下,它将告诉您move在C++中的意义。移动的semanticmove操作过程中所涉及的一切。

move-semantic理解为:在C++程序中移动对象意味着什么(以及如何实现它)?

以下是一个可能有用的好答案:What are move semantics?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44925748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档