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

标签 c++ templates g++ warnings

考虑以下代码:

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()也不返回任何东西。为什么不生成警告,因为实例化了 C2T = int使调用这两种方法同样危险?

最佳答案

如果你说 T = void , 然后没有 return需要声明。

仅仅因为您可以以一种损坏的方式使用您的模板并不意味着您必须这样做,并且编译器可能会给您带来怀疑的好处。

还要记住,类模板的成员函数仅在使用时实例化。所以真正导致错误的方法是C2<char> x; x.method(); ,这确实会产生警告。

关于c++ - 为什么 G++ 不为不返回任何内容的模板方法生成警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13059170/

相关文章:

javascript - 不理解这个在网格中生成复选框的剑道模板

c++ - 在 make 文件中链接 g++ 和 lib 不起作用

c++ - 如何为 iphone 编译一个简约的 cpp Protocol Buffer 库?

c++ - 使函数具有全局范围,如编译器固有的

C++ 函数模板特化和重载

javascript - 如果绑定(bind)空/未定义(带过滤器),Angularjs模板默认值

visual-studio-2008 - 在友好类中声明的友元函数,GCC 不编译

c++ - 如何通过 cmake 将版本详细信息添加到 .exe 或 .dll

c++ - vector 模板问题

python - cython-将c++类聚合包装