当函数的返回值是引用类型是,可以用作左值,当函数的返回值是其他类型时,不能用作左值。eg:
<pre>char &get_val(string &str, string::size_type ix )
{
return str[ix];
}
int main()
{
string s("a value");
cout << s << endl;
get_val(s,0) = 'A'; //get_val函数调用作为左值
return 0;
}</pre>在这里,get_val函数的返回值是引用,可以用作左值。
关于decltype,decltype返回的是一个类型不是一个表达式。当decltype作用于表达式的时候,结果根据表达式的不同也有所不同。如果表达式的结果是一个左值,这decltype作用于该表达式得到一个引用类型。eg:
<pre>int a = 11;
int p = &a; decltpye(p) b = a;
</pre>
如果表达式的结果是一个右值,则decltype作用于该表达式得到的是一个指针类型。eg:
<pre>int a = 11;
int *p = &a;
decltype(&p) p2 = &p</pre>