编译器警告(等级 1)C4342
行为更改: 调用了“function”,但在以前版本中调用的是成员运算符
在 Visual Studio 2002 之前的 Visual C++ 版本中,调用了一个成员,但此行为已更改,编译器现在可在命名空间范围内找到最佳匹配项。
如果找到了成员运算符,则编译器以前不会考虑任何命名空间范围运算符。 如果命名空间范围内有更好的匹配项,则当前编译器正确调用它,而以前的编译器不会考虑它。
成功将代码移植到当前版本后,应禁用此警告。 编译器可能会给出误报,为没有行为更改的代码生成此警告。
默认情况下,此警告处于关闭状态。 有关详细信息,请参阅 Compiler Warnings That Are Off by Default。
下面的示例生成 C4342:
// C4342.cpp
// compile with: /EHsc /W1
#include <fstream>
#pragma warning(default: 4342)
using namespace std;
struct X : public ofstream {
X();
};
X::X() {
open( "ofs_bug_ev.txt." );
if ( is_open() ) {
*this << "Text" << "<-should be text" << endl; // C4342
*this << ' ' << "<-should be space symbol" << endl; // C4342
}
}
int main() {
X b;
b << "Text" << "<-should be text" << endl;
b << ' ' << "<-should be space symbol" << endl;
}