C++ C++;11:const和reference类型上“auto”操作的标准参考

C++ C++;11:const和reference类型上“auto”操作的标准参考,c++,c++11,C++,C++11,假设我有一个T型: typedef ... T; 然后我有这些功能: T f11(); T& f12(); T&& f13(); const T f21(); const T& f22(); const T&& f23(); 然后这样称呼他们: auto x11 = f11(); auto x12 = f12(); auto x13 = f13(); auto x21 = f21(); auto x22 = f22(); auto x23 =

假设我有一个T型:

typedef ... T;
然后我有这些功能:

T f11();
T& f12();
T&& f13();
const T f21();
const T& f22();
const T&& f23();
然后这样称呼他们:

auto x11 = f11();
auto x12 = f12();
auto x13 = f13();
auto x21 = f21();
auto x22 = f22();
auto x23 = f23();

从C++11标准的哪些章节/条款可以推断出x11..x23的等效非自动声明?

在§7.1.6.4自动说明符中。在函数返回类型的示例中,模板参数推断规则适用

引用标准中的相关示例:

const auto&i=expr

i
的类型是以下发明函数模板的调用
f(expr)
中参数X的推导类型:

模板无效f(const AUTO&X)


因此,在您的示例中,所有变量
x11
x23
的类型被推断为
T

,即如果
模板g(T)
g(f())
auto t=f()
在这两种情况下都会导致相同类型的t?@AndrewTomazos理解标准中的示例是
const auto&i=expr
模板void f(const U&U)。这里,
i
的类型是
f(expr)
u
的推导类型。特别是,这意味着每个推导变量的类型将是
T
。也许您应该编写
模板来说明这一点……:-)@我采纳了你的建议。在我发现“paraquote”之前,我并不热衷于修改标准中的一个引用。现在请稍候<代码>类型定义。。。T使任何普通编译器都能进行编译errors@B在本上下文中,
是任何有效类型的占位符。(在一些地方,<代码>……/代码>也是有效的C++的事实没有帮助。