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)) { //... }
编译错误:
expected primary-expression before ‘t’
解决方法
它不会编译,因为在if条件下不允许这种形式的初始化.这仅仅是标准所说的有效的句法形式.
您可以使用复制初始化表单或braced-init-list:
if(SimpleLock::Token t = SimpleLock::Token(lock)) { //... } if(SimpleLock::Token t{lock}) { //... }
这在[stmt.select] / 1(N3337)中指定:
condition:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。