我正在查看有关 C++14 语言扩展的 isocpp.org 常见问题解答,阅读decltype(auto)
:
...
注意:
decltype(auto)
主要用于推断转发函数和类似包装器的返回类型,如上所示,您希望类型准确地“跟踪”您正在调用的某些表达式。但是,除此之外, decltype(auto) 并不打算成为广泛使用的功能。特别是,虽然它可以用来声明局部变量,但这样做可能只是一种反模式,因为局部变量的引用不应该依赖于初始化表达式。此外,它对您如何编写 return 语句很敏感。这两个函数有不同的返回类型:decltype(auto) look_up_a_string_1() { auto str = lookup1(); return str; } decltype(auto) look_up_a_string_2() { auto str = lookup1(); return(str); }
第一个返回字符串,第二个返回
string &
对局部变量的引用str
。
我的问题:示例中的返回类型不应该反过来吗,我的意思是,括号应该形成一个表达式,其类型应该是非引用(或右值引用?);并且没有括号,说的str
意思是“左值引用str
”。我错了吗?