像这样:
#include <iostream>
using namespace std;
int main()
{
if ( string( "abc" ).size() == 3 )
cout << "equ." << endl;
return 0;
}
有什么string("abc")
回报吗?如果是这样,那是价值还是参考?
类构造函数没有指定的返回类型,也没有返回语句。但是它们确实具有隐式返回类型-与声明它们的类相同,并且构造函数“返回”只是构造的对象。
T()
调用默认构造函数并“返回”匿名prvalue
类型T
(绑定到T&&
)。它的生命周期是使用它的表达式的生命周期。它是可修改的。
使用示例:
int() // 0
(string()+=string("123")+="abc").substr(1,3) // "23a"
所以string("abc")
最终调用字符串的构造函数。在这种情况下,这个“返回”(引号在这里很重要,构造函数在技术上不返回任何东西)一个字符串类型的值。
现在,有多种类型的值,在这种情况下,我想区分左值和右值。我会举个例子:
#include <iostream>
#include <string>
void foo(std::string& s) { std::cout << "l-value reference" << std::endl; }
void foo(std::string&& s) { std::cout << "r-value reference" << std::endl; }
int main(int argc, char* argv[])
{
std::string s;
foo(s);
foo(std::string());
return 0;
}
正如您在此处看到的,这将打印以下内容:
l-value reference
r-value reference
不同之处在于,第二个字符串是一个临时对象,因此是一个 r 值,因此调用了采用 r 值引用的重载。
所以我想说的是,临时字符串和非临时字符串都很好,字符串。区别只是一个是暂时的,另一个不是。因此,可以区分左值和右值,例如通过对左值引用和右值引用使用重载。
有关值类型之间差异的说明,请参阅此页面
它返回对内存中构造对象的引用,您正在调用size()
方法。