可修改右值和常量右值有什么区别?
What is the difference between a modifiable rvalue and a const rvalue?
string three() { return "kittens"; }
const string four() { return "are an essential part of a healthy diet"; }
根据this文章,第一行是一个可修改的右值,而第二行是一个常量右值。谁能解释一下这是什么意思?
函数的 return 值是使用 std::string 的复制构造函数复制的。如果您使用调试器单步执行程序,您会看到这一点。
正如评论所说,这完全是自我解释。 return 第一个值将是可编辑的。第二个值将是只读的。它是一个常数值。
例如:
int main() {
std::cout << three().insert(0, "All ") << std::endl; // Output: All kittens.
std::cout << four().insert(0, "women ") << std::endl; // Output: This does not compile as four() returns a const std::string value. You would expect the output to be "women are an essential part of a healthy diet”. This will work if you remove the const preceding the four function.
}
rvalue 是可以在赋值运算符的写入端写入的值。 Modifiable Rvalue 是其值可以在执行期间随时更改的值(从名称可见)。而另一方面,const Rvalue 是一个常量,在程序执行期间无法更改。
string three() { return "kittens"; }
const string four() { return "are an essential part of a healthy diet"; }
根据this文章,第一行是一个可修改的右值,而第二行是一个常量右值。谁能解释一下这是什么意思?
函数的 return 值是使用 std::string 的复制构造函数复制的。如果您使用调试器单步执行程序,您会看到这一点。
正如评论所说,这完全是自我解释。 return 第一个值将是可编辑的。第二个值将是只读的。它是一个常数值。
例如:
int main() {
std::cout << three().insert(0, "All ") << std::endl; // Output: All kittens.
std::cout << four().insert(0, "women ") << std::endl; // Output: This does not compile as four() returns a const std::string value. You would expect the output to be "women are an essential part of a healthy diet”. This will work if you remove the const preceding the four function.
}
rvalue 是可以在赋值运算符的写入端写入的值。 Modifiable Rvalue 是其值可以在执行期间随时更改的值(从名称可见)。而另一方面,const Rvalue 是一个常量,在程序执行期间无法更改。