Oca*_*shu 7 c++ compiler-errors ifstream
我知道以下代码(从这里)用于将文件的内容读取到字符串:
#include <fstream>
#include <string>
std::ifstream ifs("myfile.txt");
std::string content( (std::istreambuf_iterator<char>(ifs) ),
(std::istreambuf_iterator<char>() ) );
Run Code Online (Sandbox Code Playgroud)
但是,我不明白为什么需要这些看似多余的括号.例如,以下代码无法编译:
#include <fstream>
#include <string>
std::ifstream ifs("myfile.txt");
std::string content(std::istreambuf_iterator<char>(ifs),
std::istreambuf_iterator<char>() );
Run Code Online (Sandbox Code Playgroud)
为什么要编译这么多括号呢?
Set*_*gie 12
因为没有括号,编译器会将其视为函数声明,声明一个名为的函数content返回a std::string并将一个std::istreambuf_iterator<char>named ifs和一个无名参数作为参数,该参数是一个不带参数的函数返回一个std::istreambuf_iterator<char>.
你可以和parens一起生活,或者正如Alexandre在评论中指出的那样,你可以使用C++的统一初始化功能,它没有这种含糊之处:
std::string content { std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>() };
Run Code Online (Sandbox Code Playgroud)
或者正如Loki提到的:
std::string content = std::string(std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
525 次 |
| 最近记录: |