我有一个具有已声明方法但未在任何地方定义/使用的类。我希望这段代码会产生链接错误,但没有。看起来编译器足够聪明,可以删除无效代码。哪个默认优化正在执行此操作?如何显式禁用它以生成错误?
#include <iostream>
using namespace std;
class Base{
public:
int x;
string name;
void set(int val){ x = val;};
int get(){ return x;}
void Init();
};
int main() {
Base base;
base.set(10);
cout << base.get() << endl;
return 0;
}
EDIT1 :此处未定义Init()函数,也未在任何地方使用它。因此,我希望编译器抱怨此未定义。但是看不到任何错误/警告。
谢谢。
答案 0 :(得分:3)
通常,链接器仅对使用的未定义符号产生错误。因为您从不致电Init
,所以没有错误。
答案 1 :(得分:0)
看起来编译器足够聪明,可以删除无效代码。
编译器在这里甚至都不是“智能”的。没有使用函数的代码,因此不需要来生成可执行程序。
该功能甚至没有“使用ODR”,因此从技术上讲,编译器要求定义是错误的。