声明强化
在C++17之后,if语句可以像for循环语句一样,在括号里声明一个变量了。
if (int x = 5; x < 10) { x += 1; } // 必然会执行
初始化强化
C++11引入了初始化列表这一概念,在C++11之前,普通数组,非常简单的类,都可以使用{}
来初始化,而一般的类又要用其他的方式初始化,各种各样的初始化非常混乱。
C++11引入一个std::initializer_list
的类型,为初始化提供了统一的形式。
class Test
{
std::vector<int> data;
Test(std::initializer_list<int> list)
{
for (auto itr = list.begin(); itr != list.end(); ++itr)
data.push_back(*itr);
}
};
int main()
{
int arr[3] = {1, 2, 3};
std::vector<int> vec = {1, 2, 3};
Test test{1, 2, 3};
}
结构化绑定
这个语法很像Rust的模式匹配,就是用来从复杂的容器或者类型里,解构出我们想要的类型。
std::tuple<int, double, std::string> f() { return {1, 2.3, "456"}; }
int main()
{
auto [x, y, z] = f(); // 直接将元组中的三个成员解构出来
std::cout << x << ' ' << y << ' ' << z << endl;
return 0;
}
标签:std,初始化,变量,int,list,C++,语法,强化,itr
From: https://www.cnblogs.com/st0rmKR/p/17501805.html