c – 在if语句中声明类变量
发布时间:2020-12-16 10:36:13 所属栏目:百科 来源:网络整理
导读: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)
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)中指定:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |