注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++11及BOOST特性之九前面一些细节的补遗  

2014-04-28 15:56:39|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++11BOOST特性之九前面一些细节的补遗

 

在安全的线程队列中有一段代码是这样使用的:

dataCond.wait(locker, [this]{return !dataQueue.empty(); });

锁的补遗“C++11BOOST特性之四”和“C++11BOOST特性之五”中都有说明

         template<class _Predicate>

                   void wait(unique_lock<mutex>& _Lck, _Predicate _Pred)

                   {       // wait for signal and test predicate

                   while (!_Pred())

                            wait(_Lck);

                   }

要说明的是,这是一个最简单形式的lambda表达式,去除了小括号等(见五),不要被模板里面的声明给误导。Predicate可以理解成一个函数指针,利用其声明的指针变量,也就是 个函数来操作。

顺便再强调下,wiat会自动调用unlock函数,是为了让其它线程可以操作竞态条件,在“之四”中有详细说明。

还有,在C++11BOOST特性之五”中,background_task报是的那个错误,在VS2013中不能再重现了,其实真正的原因很简单,就是CONST函数必须调用CONST函数,不管你的函数是不是真正的修改类中的成员变量。报得错误是下面的内容:

error C2662: void MyConstTest::Test0(void): 不能将“this”指针从“const MyConstTest”转换为“MyConstTest &

而在前面的五中报得错误如下:

注意:如果没有红色部分的const会报下面的错误:

thread.cpp: 在成员函数‘void background_task::operator()() const’中:

thread.cpp:14:21: 错误: 将‘const background_task’作为‘void background_task::do_something()’的‘this实参时丢弃了类型限定 [-fpermissive]

thread.cpp:15:26: 错误: 将‘const background_task’作为‘void background_task::do_something_else()’的‘this’实参时丢弃了类型限定 [-fpermissive]

 

thread.cpp: 在函数‘int main()’中:

thread.cpp:36:8: 错误: 对成员‘join’的请求出现在‘t2’中,而后者具有非类类型‘std::thread(background_task (*)())

这两个有一些区别,但错误的原理是一样的。(但是今天那个黄色不对的部门,也就是声明线程对象时错误的方法二,也不报错了)。

再说一下五中的对象定义:大括号(或者说花括号)thread{…}这个是从GCC4.7以上及VS2013开始支持的。

http://www.it165.net/pro/html/201305/5960.html

C++11初始化列表与统一初始化”

再多说一句,在“C++小知识44---常量引用做参数的问题”中的现象跟这个现象在原理上仍然也是一样的。

一通百通,果然如是。

  评论这张
 
阅读(456)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017