我遇到了以下代码
#include <iterator>
#include <string>
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::string inputfilename, outputfilename;
std::cin >> outputfilename;
std::ofstream outputfile{ outputfilename };
outputfile << "I exist Yo!";
return 0;
}
我的第一反应是它不应该编译。我从未见过outputfile{ outputfilename };
语法。有人可以告诉我C ++语言的哪些特性在这行代码中定义了{...}
的行为?
P.S。代码可以运行并完成您期望的工作。
答案 0 :(得分:8)
从C ++ 11标准(强调我的):
8.5.4列表初始化[dcl.init.list]
1 列表初始化是从 braced-init-list 初始化对象或引用。这样的初始化程序称为初始化程序列表,列表中逗号分隔的 initializer-clauses 称为初始化程序列表的元素。初始化列表可以为空。 列表初始化可以在直接初始化或复制初始化上下文中进行; 直接初始化上下文中的 list-initialization 称为 direct-list-initialization 和 list-initialization 复制初始化上下文称为复制列表初始化。 [注意:列表初始化可以使用
- 作为变量定义中的初始化程序(8.5)
- 作为新表达式(5.3.4)
中的初始值设定项- 在退货声明(6.6.3)
中- 作为函数参数(5.2.2)
- 作为下标(5.2.1)
- 作为构造函数调用的参数(8.5,5.2.3)
- [..]