所以有复制语义,移动语义和可能还有我不知道的其他语义。我读过关于这两种语义的文章,但我仍然没有一个清晰的定义"semantics"的好方法。按照名称,移动语义与移动东西有关,但为什么被称为移动语义?
更清晰版本:在编程上下文中,语义的意义是什么?例如:移动和复制语义。
所以有复制语义,移动语义和可能还有我不知道的其他语义。我读过关于这两种语义的文章,但我仍然没有一个清晰的定义"semantics"的好方法。按照名称,移动语义与移动东西有关,但为什么被称为移动语义?
更清晰版本:在编程上下文中,语义的意义是什么?例如:移动和复制语义。
语义学基本上意味着“含义”。
为了解释这个术语,查看一个更熟悉的例子可能会有所帮助。
考虑:
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;
< p > < code >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
我们有相同的运算符=
,但在不同情况下具有不同的意义。同样,我们说它具有不同的语义。
第一种情况具有复制语义,而第二种情况具有移动语义。
int operator+(int, int)
与 std::string operator+(std::string, std::string)
不同的情况,例如 int d = b + a; assert(c == d);
和 std::string d = b + a; assert(c != d)
。 - Caleth