Tại sao tôi không thể viết mã sau đây?Tại sao tôi không thể sử dụng toán tử bool() cho std :: ofstream
#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");
}
Output
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);
Tôi biết rằng std::fstream
's operator bool()
định nghĩa là explicit
nhưng tôi không thấy bất kỳ lý do tại sao nó nên thất bại trong trường hợp như vậy. Không có chuyển đổi trung gian, chỉ đối tượng std::ofstream
tạm thời và bool
. Lý do là gì?
Vì toán tử là rõ ràng và không có ngữ cảnh để chuyển đổi thành bool ngầm thì bạn phải chuyển thành bool một cách rõ ràng :) –
Rõ ràng làm cho nó không chuyển thành bool trừ khi bạn gọi trực tiếp diễn viên. –
'return !!' hoạt động ở đây. –