以下代码为main()中的行"e = f"提供了编译错误(至少在使用MS VS 2008时):
错误C2582:'运营商='功能在'B'中不可用
class A {
public:
A() { }
static const double x;
};
const double A::x = 0.0;
class B {
public:
B() : x(0.0) { }
const double x;
};
int main( int argc, char *argv[] )
{
A c,d;
B e,f;
c = d;
e = f;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
应为两个类A和B生成默认赋值运算符!
在12.8.10中:"如果类定义没有显式声明一个复制赋值运算符,则会隐式声明一个."
我想知道为什么 GCC 编译器标志 -ffunction-sections 和链接器标志 --gc-sections 不消除不必要的响应。来自我最终可执行文件的未引用符号/函数代码。为什么它不像 GCC 文档中的预期和描述的那样工作?
可能我监督了一些意外的参考!?
检查已经使用这个非常好的方法:
GCC --gc-sections 并在链接描述文件中使用 /DISCARD/查找符号依赖项。没有成功。没有提到我未使用的功能。
没有机会自动消除死代码!?为什么 ???