为什么 G++ 不为不返回任何内容的模板方法生成警告?
Why doesn't G++ generate a warning for template methods not returning anything?
考虑以下代码:
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();
}
相关文章:
- 将成员函数指针作为参数传递给模板方法
- 模板方法访问正向声明的类仅在没有此指针的情况下无法编译
- C++11:模板方法的模板函数调用无法编译?
- 如何从ECS中的模板方法获取组件?
- 使用 SFINAE 设计模板方法
- 一个模板方法,用于同时接受常量和非常量参数
- C++模板方法中的循环依赖关系
- 在 C++ 中使用模板方法重写类方法
- 类中的模板方法
- 基于枚举参数调用专用模板方法
- 模板中的模板方法 - 实例声明和类方法声明签名不同
- 可变参数模板方法
- 使用模板方法为标头提供空 cpp 时出现问题
- SFINAE 方法在 clang 中完全禁用基类的模板方法
- 将函数和成员函数传递给模板方法
- 从非模板类调用专用模板方法
- MSVC使用constexpr-if从可变模板方法中的基本模板参数中吞下const
- 依赖于特定类类型的C++模板方法
- 由于未签名,以模板方法的方式摆脱警告
- 为什么 G++ 不为不返回任何内容的模板方法生成警告?