1:一致性初始化(Uniform Initialization)与初值列(Initializer List)
- 在C++ 11之前,程序员,特别是初学者,很容易被这个问题混淆:如何初始化一个变量或对象。初始化可因为 小括号,大括号或赋值操作符(assignment operator)的出现而发生。
- 为此C++11引入了 “一致性初始化”的概念,意思就是面对任何初始化动作,你可以使用相同语法,也就是大括号。
// 一致性初始化举例
int value[] {1,2,3}; // 初始化数组
// 初始化Vector集合
std::vector<int> vec {1,2,3};
// 初始化 vector集合
std::vector<std::string> cities {
"guangzhou","wuhan","shanghai"
};
// 初值列
class P
{
public:
P(int,int);
P(std::initializer_list<int>);
};
P p(1,2); // calls P::P(int,int);
P p{3,4}; // calls P::P(initializer_list);
P s = {5,6}; // calls P::P(initializer_list);
2 : Range_Bsed for循环
C++11引入了一种崭新的 for 循环形式,可以逐一迭代某个给定的区间,数组,集合(range,array,collection)内的每一个元素。在其他语言中可能称此为 foreach循环。
// 一般性的语法是
for(decl::coll)
{
statement
}
// 示例:
标准输出元素值
for (int i : {1,2,3,4,5})
{
std::cout << i << std::endl;
}
// 如果需要将 vector 中每个元素 elem 乘以3 , 那么你可以这样做。
std::vector<double> vec;
for(auto& elem:vec)
{
elem *= 3;
}