Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 导出类是否应该有所不同?_C++_Visual Studio_Compiler Bug - Fatal编程技术网

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;
}