c++接受:
if(int a=1)
{
//...
}为了学习目的,我编写了一个简单的锁机制类:
class SimpleLock
{
public:
class Token
{
public:
friend class SimpleLock;
Token(SimpleLock & lock) : lock(lock), locked(!lock.locked.exchange(true)) { }
~Token() { if(locked) lock.locked.store(false); }
operator bool() const { return locked; }
private:
SimpleLock & lock;
const bool locked;
};
SimpleLock() : locked(false) { }
private:
std::atomic_bool locked;
};允许我做:
SimpleLock::Token t(lock);
if(t) //Token has an operator bool() overload
{
//...
}为什么下面的代码不编译呢?
if(SimpleLock::Token t(lock))
{
//...
}编译器错误:
“t”之前的预期主表达式
在线代码链接:http://goo.gl/Knrmw7
发布于 2016-02-15 13:44:07
来自http://en.cppreference.com/w/cpp/language/if
语法是if ( condition )
有条件是下列其中之一:
我们用第二颗子弹,所以
您必须在=中使用语法。
if (SimpleLock::Token t = SimpleLock::Token(lock))
{
//...
}演示
或者用{} (而不是())构造对象
if (SimpleLock::Token t{lock})
{
//...
}演示
https://stackoverflow.com/questions/35410718
复制相似问题