
C++
文章平均质量分 65
rainharder
这个作者很懒,什么都没留下…
展开
-
c++11 闭包的实现
什么是闭包闭包有很多种定义,一种说法是,闭包是带有上下文的函数。说白了,就是有状态的函数。更直接一些,不就是个类吗?换了个名字而已。一个函数,带上了一个状态,就变成了闭包了。那什么叫 “带上状态” 呢? 意思是这个闭包有属于自己的变量,这些个变量的值是创建闭包的时候设置的,并在调用闭包的时候,可以访问这些变量。函数是代码,状态是一组变量,将代码和一组变量捆绑 (bind) ,就形成了闭包。闭包的状态捆绑,必须发生在运行时。仿函数:重载 operator()#define _CR转载 2021-08-31 13:59:32 · 353 阅读 · 0 评论 -
粗识openmp
看到一段代码利用openmp并行执行for循环,觉得这玩意真方便,一行代码就完事了,就上网学习。大致看完之后得出个结论,这玩意也就只能for循环用用。个人粗浅的认识,接受一切反驳。理由如下:上手有门槛,初级功能简单方便,想用好高级功能还是挺麻烦的。跨平台、多编译器支持:不是决定性优势,跨平台的线程库也不少。多线程很多情况下是启动不同的处理函数,这种场景用std::thread/pthread也麻烦不到哪去,同步什么的控制起来更熟悉。总之:学习成本(特别是团队)与收益不成正比。但是,如果有大原创 2020-09-03 14:29:01 · 189 阅读 · 0 评论 -
noexcept与栈展开(stack unwinding)
noexcept说明在C++11之后,表示函数不会抛出异常的动态异常声明throw()被新的noexcept异常声明所取代。该关键字告诉编译器,函数中不会发生异常,这有利于编译器对程序做更多的优化。如果在运行时,noexecpt函数向外抛出了异常(如果函数内部捕捉了异常并完成处理,这种情况不算抛出异常),程序会直接终止,调用std::terminate()函数,该函数内部会调用std::abort()终止程序。从语法上讲,noexcept修饰符有两种形式,一种就是简单地在函数声明后加上noexcep原创 2020-09-03 11:05:35 · 390 阅读 · 0 评论 -
编译器生成默认构造函数的情况
编译器生成默认构造函数的情况 在类没有显示声明构造函数的情况下,编译器并不总是为我们自动生成默认构造函数,以下4种情况,编译器才会为我们自动生成默认构造函数: 1.类中有一个类成员含有默认构造函数的,编译器会为该类自动生成默认构造函数,自动插入代码,调用该成员的构造函数; 2.基类中含有默认构造函数,编译器会为该类自动生成默认构造函数,自动插入代码,调用基类的构造函数; 3.类中含有虚函数时,由于编译器要为该类生成虚函数表vtable,并为该类的对象生成指向该v...转载 2020-08-31 17:01:29 · 483 阅读 · 0 评论 -
new T加不加括号的区别
new对象时加不加括号有什么区别?new T;new T();总结两句话:建议使用new T();,明确调用构造函数。用new T;就表示不关心是否初始化,一般后续会有初始化语句。new T;的行为不确定,与类定义、编译器实现有关。x详见附录【1】struct A { int m; }; // POD// 注:这里与附录不同,增加virtual编译器才生成默认构造函数,可能跟跟编译器版本有关struct B { virtual ~B(); int m; }; // non-POD,原创 2020-09-03 09:17:40 · 394 阅读 · 0 评论 -
C++ POD类型
在C++11标准中,POD出现的概率特别高,目测是非常重要的一个概念,以往都是看的一知半解。今天抽空专门研究下POD究竟是什么,到底有多重要,有什么作用呢?POD (Plain Old Data),是C++语言的标准中定义的一类数据结构,通常用于说明一个类型的属性,尤其是自定义用户类型的属性,同时POD属性在C++11往往又是构建其他C++概念的从基础。百度百科中定义:POD适用于需要明确的数据底层操作的系统中。POD通常被用在系统的边界处,即指不同系统之间只能以底层数据的形式进行交互,系统...转载 2020-09-03 09:16:45 · 285 阅读 · 0 评论