大佬教程收集整理的这篇文章主要介绍了c – 对basic_istream / ifstream / ofstream的bool进行隐式强制转换在Visual Studio 2013中不起作用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
std::ofstream stm; if(stm != NULL) { }
在VS 2013中,您收到此编译错误:
VS2012
ios_base::operator void *() const;
VS2013
operator void *()const已被删除,并且添加了带有显式的运算符bool:
ios_base::explicit operator bool() const;
现在我的问题:
>我在互联网上找不到有关此更改的任何信息.你知道在任何地方都有关于这种变化的官方文章吗?
>我有遗留代码,其中if(stm!= NULL)被大量使用.出于无关的原因,最好不要更改代码.有没有办法让它在VS 2013中编译而不改变它?我找不到任何可以恢复operator void *或从运算符bool()中删除显式的条件编译指令.
PS:gcc 4.9.0仍然有operator void *()const.所以它不会有这个问题.
更新:
为了使我的遗留代码编译,我按照建议实现了以下重载:
#include <xiosbase> bool operator==(const std::basic_ios<char,char_Traits<char>> &stm,int null_val) { return static_cast<bool>(stm) == null_val; } bool operator==(int null_val,const std::basic_ios<char,char_Traits<char>> &stm) { return operator==(stm,null_val); } bool operator!=(int null_val,char_Traits<char>> &stm) { return !operator==(stm,null_val); } bool operator!=(const std::basic_ios<char,int null_val) { return !operator==(stm,null_val); }
在我的情况下,char值类型足够,第二个参数是int,因为不支持非NULL的东西.
以上是大佬教程为你收集整理的c – 对basic_istream / ifstream / ofstream的bool进行隐式强制转换在Visual Studio 2013中不起作用全部内容,希望文章能够帮你解决c – 对basic_istream / ifstream / ofstream的bool进行隐式强制转换在Visual Studio 2013中不起作用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。