C++ C++;11:const和reference类型上“auto”操作的标准参考
假设我有一个T型: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 =
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++的事实没有帮助。