C++ 为什么是;a、 模板foo<;0>;();&引用;即使“允许”;a、 富<;0>;();&引用;够了吗? 结构A { 模板 void foo() {} }; int main() { A A; a、 foo();//好的 a、 模板foo();//也可以 }
显然,C++ 为什么是;a、 模板foo<;0>;();&引用;即使“允许”;a、 富<;0>;();&引用;够了吗? 结构A { 模板 void foo() {} }; int main() { A A; a、 foo();//好的 a、 模板foo();//也可以 },c++,templates,syntax,standards,member-functions,C++,Templates,Syntax,Standards,Member Functions,显然,a.foo()比a.template foo()更简洁、直观和富有表现力 强>为什么C++允许 .A模板脚注();代码>即使a.foo()足够了吗?有时,在模板内部,您需要编写a.template foo(),而不是a.foo() @melpomene在评论中给出了一个很好的例子: struct A { template<int> void foo() {} }; int main() { A a; a.foo<0>();
a.foo()
比a.template foo()更简洁、直观和富有表现力代码>
<>强>为什么C++允许<代码> .A模板脚注();代码>即使a.foo()
足够了吗?有时,在模板内部,您需要编写a.template foo()
,而不是a.foo()
@melpomene在评论中给出了一个很好的例子:
struct A
{
template<int>
void foo()
{}
};
int main()
{
A a;
a.foo<0>(); // ok
a.template foo<0>(); // also ok
}
模板
void do_stuff(){
Tα;
a、 模板foo();
}
做某事;
- 在C++03中,
a.template foo()
不应在当前情况下使用
编译代码时,g++
将输出以下警告:
警告:模板[-Wc++11扩展名]之外的“模板”关键字
- 在C++11中,语法已经简化,允许在任何地方使用
a.template foo()
语法
因为在某些情况下,a.template foo
是必需的,所以为什么不允许它无处不在呢?template void do_stuff(){ta;a.template foo();}。。。做某事代码>在这里不允许它需要更复杂的语言语法。事实上,曾经有一段时间它是不允许的。C++11放宽了简化语法的要求。用-std=c++03-pedantic errors
试一下,你的编译器会向你抱怨的。可能是
template<typename T>
void do_stuff() {
T a;
a.template foo<0>();
}
do_stuff<A>();