C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 在if语句中声明类变量大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
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))
{
    //...
}

编译错误

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

解决方法

它不会编译,因为在if条件下不允许这种形式的初始化.这仅仅是标准所说的有效的句法形式.

您可以使用复制初始化表单或braced-init-list:

if(SimpleLock::Token t = SimpleLock::Token(lock))
{
    //...
}

if(SimpleLock::Token t{lock})
{
    //...
}

这在[stmt.SELEct] / 1(N3337)中指定:

大佬总结

以上是大佬教程为你收集整理的c – 在if语句中声明类变量全部内容,希望文章能够帮你解决c – 在if语句中声明类变量所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。