首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在if语句中声明类变量

在if语句中声明类变量
EN

Stack Overflow用户
提问于 2016-02-15 13:33:26
回答 1查看 396关注 0票数 3

c++接受:

代码语言:javascript
复制
if(int a=1)
{
    //...
}

为了学习目的,我编写了一个简单的锁机制类:

代码语言:javascript
复制
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;
};

允许我做:

代码语言:javascript
复制
SimpleLock::Token t(lock);

if(t) //Token has an operator bool() overload
{
    //...
}

为什么下面的代码不编译呢?

代码语言:javascript
复制
if(SimpleLock::Token t(lock))
{
    //...
}

编译器错误:

“t”之前的预期主表达式

在线代码链接:http://goo.gl/Knrmw7

EN

回答 1

Stack Overflow用户

发布于 2016-02-15 13:44:07

来自http://en.cppreference.com/w/cpp/language/if

语法是if ( condition )

有条件是下列其中之一:

  • 在上下文上可转换为bool的表达式。
  • 具有大括号或等于初始化项的单个非数组变量的声明。

我们用第二颗子弹,所以

您必须在=中使用语法。

代码语言:javascript
复制
if (SimpleLock::Token t = SimpleLock::Token(lock))
{
    //...
}

演示

或者用{} (而不是())构造对象

代码语言:javascript
复制
if (SimpleLock::Token t{lock})
{
    //...
}

演示

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35410718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档