为什么在文件中额外的括号读取功能?(Why are extra parenthesis in fil

2019-07-31 22:35发布

据我所知,下面的代码( 从这里开始 )来读取文件到字符串的内容:

#include <fstream>
#include <string>

  std::ifstream ifs("myfile.txt");
  std::string content( (std::istreambuf_iterator<char>(ifs) ),
                       (std::istreambuf_iterator<char>()    ) );

不过,我不明白为什么需要这样的看似多余的括注。 例如,下面的代码无法编译:

#include <fstream>
#include <string>

  std::ifstream ifs("myfile.txt");
  std::string content(std::istreambuf_iterator<char>(ifs),
                      std::istreambuf_iterator<char>()    );

为什么那么多的括号都需要这个编译?

Answer 1:

因为如果没有括号,编译器将它作为一个函数声明,声明一个函数命名content ,它返回一个std::string ,并采取作为参数std::istreambuf_iterator<char>名为ifs ,这是一个功能不采取任何一种莫名的参数参数,它返回一个std::istreambuf_iterator<char>

您可以用括号居住,或作为亚历山大在评论中指出的,你可以使用C ++不具有这种含糊的统一初始化功能:

std::string content { std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>() };

或者像洛基提到:

std::string content = std::string(std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>());


文章来源: Why are extra parenthesis in file read function?