c – 为什么我不能对std :: ofstream使用operator bool()

前端之家收集整理的这篇文章主要介绍了c – 为什么我不能对std :: ofstream使用operator bool()前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么我不能写下面的代码
#include <fstream>
#include <string>

bool touch(const std::string& file_path)
{
    return std::ofstream(file_path,std::ios_base::app);
}

int main()
{
    touch("foo.txt");
}

产量

prog.cpp: In function 'bool touch(const string&)':
prog.cpp:6:52: error: cannot convert 'std::ofstream {aka std::basic_ofstream<char>}' to 'bool' in return
  return std::ofstream(file_path,std::ios_base::app);

http://ideone.com/IhaRaD

我知道std :: fstream的运算符bool()定义为显式但我没有看到任何理由为什么它会在这种情况下失败.没有中间转换,只有临时的std :: ofstream对象和bool.什么原因?

解决方法

这正是因为operator bool()被定义为显式的,你不能以这种方式使用它.自动调用显式运算符bool()的唯一上下文是明确的条件,例如if()while(),?:和for()的中间表达式.

如果要将std :: ofstream转换为bool作为返回值,则必须使用static_cast< bool>()或等效项.

猜你在找的C&C++相关文章