title | date | comments | categories | tags | permalink | ||||
---|---|---|---|---|---|---|---|---|---|
开发环境问题备忘
|
2020/1/31
|
false
|
|
|
1.7
|
1 vscode不支持c++11语法的问题
在c++11标准中,增加了initializer_list初始化列表的功能。这样我们在使用诸如std::vecotr的时候,可以使用如下的语法:
std::vector<int> vec1{1,2,3,4,5};
std::vector<int> vec2={1,2,3,4,5};
而不用再像以前一样,用下面这种让人恶心的语法
int arr[]={1,2,5};
std::vector<int> coins(arr, arr + sizeof(arr) / sizeof(int));
但这是c++11及以后的版本才支持的,我们用vscode的时候,往往并没有配置使用c++11标准,导致在编译运行时候报错。如下所示
error: expected expression std::vector<char> v1({'A','B','C','E'});
解决办法是在vscode的配置文件tasks.json中配置参数 “"-std=c++11”,这样就能支持c++11语法了。配置截图如下(MAC系统)
支持initializer_list接口的方法还可以支持for(int n: nums)这样简洁的语法
我们也可以给自定义类型添加initializer_list接口,使其支持这种语法,示例如下:
#include <iostream>
#include <vector>
class Num
{
private:
std::vector<int> vv;
public:
Num(const std::initializer_list<int> &v)
{
for (auto a : v)
{
vv.push_back(a);
}
}
void PrintNum(void)
{
for (auto v : vv)//遍历变得简单
{
std::cout << v << " ";
}
std::cout << std::endl;
}
};
int main(int argc, char **argv)
{
Num n{1, 2, 3, 4};//写着很爽
n.PrintNum();
return 0;
}