因此,有复制语义,移动语义,也许更多的语义,我不知道。我读过关于这两种语言的文章,但我对“语义”还没有一个很好的定义。顾名思义,移动语义与移动事物有关,但是为什么它被称为move 语义呢?
更清晰的版本:在编程环境中语义的含义是什么?示例:移动和复制语义。
发布于 2017-07-05 12:18:28
语义一词用于描述某事物的基本含义。
您可以说,当操作将对象状态从一个对象转移到另一个对象时,它具有移动语义。当然,在现实中,可能会复制一些指针,仅此而已,但在语义上,您的对象已经被移动了。
另一个例子是所有权转让,其中最重要的是责任(即承诺释放某种资源)。在这种情况下,从计算的角度来看,几乎什么都不会发生,但在语义上所有权是转移的。
复制语义也是如此:您可以说,将一个对象传递给一个函数具有复制语义,即您的对象将被复制,并且该函数将获得一个具有其自身生命周期的独立副本。
问题的另一个方面是语法,它是如何按照语言的规则描述您想要的内容。
C++具有非常灵活的语法重载操作符、用户定义的转换、宏等等,因此几乎任何理想的语义都可以附加到任何特定的语法中。
发布于 2017-07-05 12:21:37
语义学的基本意思是“的意义”。
这可能有助于看一个更熟悉的案例来解释这个词。
考虑:
int a = 3;
int b = 5;
int c = a + b;
a + b
的值是8
,因为+
操作符的语义是取其操作数的数值和。
现在考虑这一点:
std::string a = "hello";
std::string b = "world";
std::string c = a + b;
a + b
的值是"helloworld"
,因为+
操作符的语义是连接它的操作数。
当+
运算符与std::string
一起使用时,据说它具有与数值类型不同的语义。
它有一个不同的,意思是。
现在考虑复制和移动语义:
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具有不同的语义。
第一种情况具有复制语义,第二种情况具有移动语义。
发布于 2017-07-05 12:16:40
语义学是关于某事的意义的。move-semantic
是关于meaning
of 移动对象的。具体来说,在这种情况下,它将告诉您move
在C++中的意义。移动的semantic
是move
操作过程中所涉及的一切。
将move-semantic
理解为:在C++程序中移动对象意味着什么(以及如何实现它)?
以下是一个可能有用的好答案:What are move semantics?
https://stackoverflow.com/questions/44925748
复制相似问题