【发布时间】:2019-04-24 08:47:52
【问题描述】:
我在看isocpp.org FAQ on C++14 language extensions,正在阅读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 的左值引用”。我错了吗?
【问题讨论】:
-
反过来应该是什么?建议还是返回类型?
-
This answer 似乎相关。
-
@StoryTeller:见编辑。
-
简而言之:返回类型分别为
decltype(str)和decltype((str))。第一个触发了decltype的操作数是变量的裸名的特殊情况,并且规则不同(它完全模仿变量的类型)。
标签: c++ c++14 auto decltype decltype-auto