我想用对象列表初始化向量或数组。它适用于向量,但不适用于数组:
struct Widget
{
string name;
vector<int> list;
};
struct Object
{
string name;
vector<int> list;
Object(string _name, vector<int> _list) : name(_name), list(_list) { }
};
int main()
{
const vector<Widget> vw = {
{"vw1", {1,2,3}},
{"vw2", {1,2,3}} };
const array<Widget,2> aw = {
{"aw1", {1,2,3}},
{"aw2", {1,2,3}} };
const vector<Object> vo = {
{"vo1", {1,2,3}},
{"vo2", {1,2,3}} };
const array<Object,2> ao = {
{"ao1", {1,2,3}},
{"ao2", {1,2,3}} };
return 0;
}
Run Code Online (Sandbox Code Playgroud)
clang 的错误:
widget.cpp:36:9: error: excess elements in struct …Run Code Online (Sandbox Code Playgroud) 假设有一个由主线程控制的布尔标志(keep_running).另一个线程无限循环,直到此标志变为false.
int main() {
bool keep_running(true);
std::thread run( [](bool &keep_running)
{
while(keep_running)
{
// do work
}
}, std::ref(keep_running) );
// do other work
keep_running = false;
run.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该标志应该是原子的吗?
std::atomic<bool> keep_running
Run Code Online (Sandbox Code Playgroud)
我想,非原子版本可能发生的最糟糕的情况是,当标志被设置为正确时
while(keep_running)
Run Code Online (Sandbox Code Playgroud)
被执行.在这种情况下,循环继续运行一次(非严格需要)迭代.但就我而言,这是可以接受的.
是否存在上述代码可能出错的情况?
编辑:
出于性能原因(以及没有错误),我对此感兴趣.那么,使用std :: atomic作为循环中的标志是否会对性能产生负面影响?