使用析构函数的C值表达式在Visual Studio 2010中生成警告C4701
以下C代码在Visual Studio 2010中编译时没有警告:
extern void callFunc( int,int ); struct str_wrapper { str_wrapper(); }; extern bool tryParseInt( const str_wrapper& str,int& outValue ); void test() { int x,y; if ( tryParseInt( str_wrapper(),x ) && tryParseInt( str_wrapper(),y ) ) { // No warning generated callFunc( x,y ); } } 但是,如果str_wrapper具有用户定义的析构函数,则代码会在callFunc(x,y)行生成警告: 警告C4701:使用了未初始化的局部变量’y’. extern void callFunc( int,int ); 如果两个示例都生成警告,或者两个示例都没有生成警告,我会很高兴.我错过了一些不起眼的C规则,还是这是一个编译器错误? 解决方法
不幸的是,我无法使用提供的代码重现该警告.但是,我假设编译器因为短路评估语言功能而生成它.
X应始终在tryParseInt函数中“初始化”,但Y的“初始化”仅取决于先前tryParseInt(str_wrapper(),x)调用的布尔结果.但是,是的,为什么在if-block中为行生成警告仍然没有任何意义.也许编译器已经欺骗了自己? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |