C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 对basic_istream / ifstream / ofstream的bool进行隐式强制转换在Visual Studio 2013中不起作用大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码在VS 2012中编译,但在VS 2013中编译

std::ofstream stm;
if(stm != NULL)
{
}

在VS 2013中,您收到此编译错误

我查看了标题,并在< xiobase>中我找到了以下内容

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的东西.

解决方法

如果你有很多遗留代码,你可以添加一个自定义运算符!=(和operator ==)函数,它接受正确的参数:

bool operator!=(std::basic_ios const& ios,@R_607_2942@ ptr);
bool operator!=(@R_607_2942@ ptr,std::basic_ios const& ios);

大佬总结

以上是大佬教程为你收集整理的c – 对basic_istream / ifstream / ofstream的bool进行隐式强制转换在Visual Studio 2013中不起作用全部内容,希望文章能够帮你解决c – 对basic_istream / ifstream / ofstream的bool进行隐式强制转换在Visual Studio 2013中不起作用所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。