gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:15:44 27 4
gpt4 key购买 nike

为什么我不能写下面的代码?

#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::fstreamoperator bool() 定义为 explicit 但我看不出有任何原因在这种情况下应该失败。没有中间转换,只有临时 std::ofstream 对象和 bool。这是什么原因?

最佳答案

正是因为 operator bool()定义为 explicit你不能以这种方式使用它。 explicit operator bool() 的唯一上下文自动调用是为了明确的条件,例如 if while , ?: , !for 的中间表达式. (有关更完整的摘要,请参阅我的问题 When can I use explicit operator bool without a cast?)。

A return语句的值永远不会 根据上下文转换为 bool ,所以如果你想转换 std::ofstreambool作为返回值,您必须使用static_cast<bool>()或等效的。

关于c++ - 为什么我不能对 std::ofstream 使用 operator bool(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39290725/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com