void foo() {
static int id = 0;
const int local_id = id++;
//do something with local_id;
}
Run Code Online (Sandbox Code Playgroud)
多个线程可以多次并行调用foo.我希望foo的每次调用都使用local_id的"唯一"值.上面的代码可以吗?我想知道第二个线程是否在第一个线程增加值之前将id的值赋给local_id.如果不安全,是否有任何标准解决方案?
我有一个类似的课程
struct S {
bool foo(const AType& v) const {
return values.count(&v); // compile error due to the constness of v
}
private:
std::set<AType*> values;
};
Run Code Online (Sandbox Code Playgroud)
这是一个简化版本.在实际代码中,foo做了一些复杂的事情.代码产生错误
invalid conversion from ‘const AType*’ to ‘std::set<AType*>::key_type {aka AType*}’
Run Code Online (Sandbox Code Playgroud)
我认为FOO应该采取"const的A型和V",因为它不发生变异诉类型成员变量"价值"的不能被标准::设置<常量A型*>由于该结构的召唤非const方法的一些方法"值"中包含的元素.我可以抛弃'v'的常量:
bool foo(const AType& v) const {
return values.count((AType*) &v);
}
Run Code Online (Sandbox Code Playgroud)
但我认为这可能不是一个好的解决方案.我可以有什么解决方案?