C++ 导出类是否应该有所不同?
使用C++ 导出类是否应该有所不同?,c++,visual-studio,compiler-bug,C++,Visual Studio,Compiler Bug,使用VS 2010/2012编译以下代码时,会出现以下错误: 错误C4716:“DI_1::operator=”:必须返回一个值 而我希望它也会为DI_2类返回相同的错误 这是不是一个编译器错误,没有将DI_2类标记为错误 如果没有,有人能解释原因吗 编辑: 我使用Solaris编译器进行了确认,它对这两个类都抛出了错误。从二进制模块导出类应该不会有任何区别。在您的示例中,我也没有看到任何符号差异 然而,糟糕的错误报告在无与伦比的小问题,而不是错误的代码生成。每一个合理的编译器开发人员都会遵循这
VS 2010/2012
编译以下代码时,会出现以下错误:
错误C4716:“DI_1::operator=”:必须返回一个值
而我希望它也会为DI_2
类返回相同的错误
这是不是一个编译器错误,没有将DI_2
类标记为错误
如果没有,有人能解释原因吗
编辑:
我使用Solaris编译器进行了确认,它对这两个类都抛出了错误。从二进制模块导出类应该不会有任何区别。在您的示例中,我也没有看到任何符号差异 然而,糟糕的错误报告在无与伦比的小问题,而不是错误的代码生成。每一个合理的编译器开发人员都会遵循这个规则。这就是解释
p、 在模板实例化期间,只生成那些被调用的方法。其他方法(以及其中潜在的语法错误)被忽略。相反,对于类AFAIK,通常会生成所有方法。我不知道这种不对称的原因。也许MS编译器正在朝这个方向做一些事情。从二进制模块导出类应该不会有任何区别。在您的示例中,我也没有看到任何符号差异 然而,糟糕的错误报告在无与伦比的小问题,而不是错误的代码生成。每一个合理的编译器开发人员都会遵循这个规则。这就是解释
p、 在模板实例化期间,只生成那些被调用的方法。其他方法(以及其中潜在的语法错误)被忽略。相反,对于类AFAIK,通常会生成所有方法。我不知道这种不对称的原因。可能MS编译器正朝着这个方向运行。一旦您尝试调用b的
操作符=
,就会出现错误。然而,从技术上讲,这只是一个编译器警告(会自动升级为错误)。没有返回是未定义的行为。可能dllexport强加了更严格的规则。闻起来像是一个bug,请将此发布到connect.microsoft.com尝试调用b的操作符=
时会出现错误。然而,从技术上讲,这只是一个编译器警告(会自动升级为错误)。没有返回是未定义的行为。也许dllexport强加了更严格的规则。闻起来像个bug,请将此发布到connect.microsoft.com
class __declspec(dllexport) DI_1
{
DI_1& operator = (DI_1 &){};
};
class DI_2
{
DI_2& operator = (DI_2 &){};
};
int main()
{
DI_1 a;
DI_2 b;
return 0;
}