为什么 G++ 不为不返回任何内容的模板方法生成警告?

Why doesn't G++ generate a warning for template methods not returning anything?

本文关键字:模板方法 警告 G++ 返回 任何内 为什么      更新时间:2023-10-16

考虑以下代码:

template <typename T>
class C2 {
     public: 
             T method() { }
             int method2() { }
};

g++ -Wall -c -pedantic编译它给我以下警告:

test.cpp: In member function ‘int C2<T>::method2()’: test.cpp:4:29: warning: no return statement in function returning non-void [-Wreturn-type]

这是预期的。奇怪的是,method()也没有返回任何东西。为什么这不产生警告,因为用T = int实例化C2呼叫这两种方法同样危险?

如果您说T = void,则不需要return语句。

仅仅是因为您 can 以破碎的方式使用模板并不意味着您 to com&shy; PILER可能会给您带来的好处怀疑。

还请记住,类模板的成员函数仅在使用时就实例化。因此,真正原因的方法一个错误是具有C2<char> x; x.method();,这确实会产生警告。

您实际上必须调用"方法",以使编译器对其进行编译。毕竟这是一个模板功能。请参阅下面代码中的评论。

template <typename T>
class C2 {
     public: 
             T method() { }
             int method2() { }
};
int main()
{
   C2<int> c;
   c.method2();
   // If you comment out the below line, there is no warning printed.
   c.method();
}