std :: ofstream == NULL不会为-std = gnu ++ 11编译,任何解决方法?

rph*_*rph 5 c++ gcc stl c++11

请考虑以下代码:

std::ostream file;
if( file == NULL ) std::cout << "Failed to open file" << std::endl;
Run Code Online (Sandbox Code Playgroud)

它在传递-std = gnu11(默认来自GCC 5.2)或仅使用时完美编译
gcc code.cpp -o a.out.

它失败了-std = gnu ++ 11,但是:

no match for ‘operator==’ (operand types are ‘std::ofstream {aka std::basic_ofstream<char>}’ and ‘long int’)`
Run Code Online (Sandbox Code Playgroud)

什么是最简单的解决方法?

细节:

我必须使用std = gnu ++ 11来访问shared_ptr定义.此外,我的一些代码是自动生成的,修改生成器会产生合理的努力 - 所以我想知道是否有人可以想出更简单的方法来摆脱这种"缺乏兼容性".

Col*_*mbo 19

这首先编译的唯一原因是因为std::ios,它ofstream源于,operator void*在C++ 11之前提供了非显式(!).从C++ 11开始,explicit operator bool提供了代码,它不允许代码所必需的隐式转换.相反,写

if (!file) std::cout << "Failed to open file" << std::endl;
Run Code Online (Sandbox Code Playgroud)

  • 我认为代码开头是"错误的".ofstream不是指针(当然,它可以转换为指针),因此不应该像指针那样对待它. (3认同)