我是一名新的C ++初学者。我不明白为什么表达
string three() { return "kittens"; }
返回右值。是因为返回的字符串(kittens)是临时值吗?非常感谢你
答案 0 :(得分:0)
是的 - 它正在使用return语句中的基本(C风格)字符串文字构造一个临时字符串对象,并将其作为临时值返回。调用你的函数的人要么必须将临时右值复制到左值,要么在语句结束时将其丢弃。
或者更确切地说,编译器通过自动调用std :: string的转换构造函数来将您的字符串(const char*
)转换为字符串,使您的代码或多或少等效到return std::string("kittens")
。
Here is a short (but useful) primer on the difference between lvalues and rvalues