sta::atomic
最基本的原子整数类型
是std::atomic(可以使用预定义的别名std::atomic_bool),这是一个比std::atomic_flag功能更全的布尔标志,并且可以使用非原子的bool来赋值和初始化。
std::atomic<bool> b(true);
b=false;
要注意的是,原子类型赋值操作返回值而非引用。
与std::atomic_flag使用clear不同,std::atomic写(存储)操作是通过store来完成的;test_and_set也由exchange函数替代,它可以用新值替代原值,同时获取原值。std::atomic支持对值得无修改查询,通过隐式转换为普通得bool,或者调用load函数,load是一个载入操作。
std::atomic<bool> b;
bool x=b.load(std::memory_order_require);
b.store(true);
x=b.exchange(false,std::memory_order_acq_rel);
auto类型用法总结
用途
auto是c++程序设计语言的关键字。用于两种情况
(1)声明变量时根据初始化表达式自动推断该变量的类型
(2)声明函数时函数返回值的占位符
auto可以在声明变量时根据变量初始值的类型自动为此变量选择匹配的类型。
举例:对于值x=1;既可以声明: int x=1 或 long x=1,也可以直接声明 auto x=1
用法
根据初始化表达式自动推断被声明的变量的类型,如:
auto f = 3.14; //double
auto s("hello"); //const char*
auto z = new auto(9); //int *
auto x1 = 5, x2 = 5.0, x3 = 'r'; //错误,必须是初始化为同一类型
但是,这么简单的变量声明类型,不建议用auto关键字,而是应更清晰地直接写出其类型。
auto关键字更适用于类型冗长复杂、变量使用范围专一时,使程序更清晰易读。如:
std::vector<int> vect;
for(auto it = vect.begin(); it != vect.end(); ++it)
{ //it的类型是std::vector<int>::iterator
std::cin >> *it;
}