c++
文章平均质量分 92
rotation ㅤ
这个作者很懒,什么都没留下…
展开
-
c++类的构造函数两种初始化成员方式的区别
类的构造函数在初始化成员时,有以下两种方式:方式一:CSomeClass::CSomeClass() { x=0; y=1; } 方式二:CSomeClass::CSomeClass() : x(0), y(1) { } 方式一我们可以称为赋值初始化,通过在函数体内进行赋值初始化。方式二我们称为列表初始化,在冒原创 2017-04-12 19:34:56 · 12461 阅读 · 0 评论 -
C++11返回类型后置语法的使用
C++11新标准增加的auto不仅可以自动推断变量类型,还能结合decltype来表示函数的返回值。这些新特性可以让我们写出更简洁、更现代的代码。在泛型编程中,可能需要通过参数的运算来得到返回值的类型。我们看一下下面这个例子:#include<iostream>using namespace std;template <typename R,typename T, typename U>R a原创 2017-10-10 18:55:51 · 3432 阅读 · 0 评论 -
c++虚基类
要介绍虚基类的作用,首先要引出多继承的概念。 多继承(Multiple Inheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。 多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个问题,所以虚基类的作用就是避免了多继承时产生命名冲突。如图: 上图的继承方式我们称为菱形继承,我们拿此图来举例说明。 类 A 派生出类 B 和类 C原创 2017-04-14 22:49:44 · 724 阅读 · 0 评论 -
C++11有关线程同步的使用
互斥量和条件变量是控制线程同步的常用手段,用来保护多线程同时访问的共享数据。 c++11提供了这些操作,同时还提供了原子变量和一次调用的操作,用起来非常的方便。 我们在这里只介绍如何在C++中使用这些同步机制,有关概念的介绍我们就不在这里多说了。互斥量C++11中提供了如下4种语义的互斥量(mutex):std::mutex:独占的互斥量,不能递归使用。std::timed_mutex:带超原创 2017-08-04 15:50:05 · 6246 阅读 · 1 评论 -
C++11多线程的使用
C++11之前,C++语言没有对并发编程提供语言级别的支持,这使得我们在编写可移植的并发程序时,存在诸多不便。现在C++11增加了线程以及线程相关的类,很方便地支持了并发编程,使得编写的多线程程序的可移植性得到了很大提高。有关线程的概念及相关知识,我们在这里就不再提了,只讲一下在C++下如何创建和使用线程。C++11提供了线程的类,由于C++封装的特性,使得我们使用封装好的类有关线程操作非常的简便。原创 2017-08-04 10:18:17 · 1866 阅读 · 0 评论 -
c++通过cout输出字符变量的地址
今天,我遇到了这样的一种情况,我想输出一个字符串的首地址。 那么该怎么输出呢?通常我们可能的想法是直接cout啊。 比如:char ss[20]="hello";cout<<ss<<endl; 运行结果: hello我们会发现,ss存储的值虽然是一个地址,但我们执行cout的时,实际上它会输出ss指向的字符串。 那该怎么办?我在输出的时候其实考虑到上面的情况了,然后我想了想,如果原创 2017-07-22 17:01:40 · 9575 阅读 · 0 评论 -
c++关联容器总结
关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的。与之相对,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。 关联容器支持高效的关键字查找与访问。两个主要的关联容器类型是map与set。map类容器map容器中的元素是一些关键字-值(key-value)对:关键字起到索引的作用,值则表示与索引相关联的数据。字典则是一个很好的使用map的例子:可以将单词作为关键字原创 2017-06-25 16:49:51 · 10156 阅读 · 2 评论 -
c++11右值引用
c++11中引入了右值引用和移动语义,可以避免无谓的复制,提高了程序的性能。 我们平常所说的引用通常是指左值引用,用&表示。而右值引用,用&&表示。 要介绍右值引用的作用以及如何使用之前,我们必须要搞明白什么是左值,什么是右值。左值与右值 左值:指表达式结束后依然存在的持久对象。 右值:指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法: 看看能不能对表达式取地址,原创 2017-06-18 21:06:06 · 2179 阅读 · 0 评论 -
c++类的大小计算
c++中类所占的大小计算并没有想象中那么简单,因为涉及到虚函数成员,静态成员,虚继承,多继承以及空类等,不同情况有对应的nisan方式,在此对各种情况进行总结。首先要明确一个概念,平时所声明的类只是一种类型定义,它本身是没有大小可言的。 我们这里指的类的大小,其实指的是类的对象所占的大小。因此,如果用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。关于类/对象大小的计算首先,类原创 2017-06-01 23:01:02 · 31992 阅读 · 24 评论 -
c++initializer_list详解
initializer_list是C++11提供的新类型,定义在头文件中。 用于表示某种特定类型的值的数组,和vector一样,initializer_list也是一种模板类型。template< class T >class initializer_list;要介绍initializer_list的使用,有必要先谈一谈列表初始化。C++11扩大了初始化列表的适用范围,使其可用于所有内置类型和原创 2017-05-21 21:43:10 · 55036 阅读 · 9 评论 -
c++运算符重载
什么是运算符重载?运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。运算符函数定义的一般格式如下:<返回类型说明符> operator <运算符符号>(<参数表>){ <函数体>}为什么要重载运算符?C++中预定义的运算符的操作原创 2017-05-19 22:06:19 · 3730 阅读 · 0 评论 -
json for modern c++的使用
最近学习了json for modern c++的使用,在此总结一些常用功能使用方法。 老规矩,还是先简单介绍一下什么是json吧。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Per原创 2017-04-30 23:33:35 · 36955 阅读 · 22 评论 -
C++适配器的使用总结
C++标准库定义了三个顺序容器的适配器:stack、queue和priority_queue。它们分别是栈适配器、队列适配器和优先队列适配器。适配器是标准库中的一个通用概念。容器、迭代器和函数都有适配器。本质上,一个适配器是一种机制,能使某种事物的行为看起来像另外一种事物一样。一个容器适配器接受一种已有的容器类型,使其行为看起来像一种不同的类型。 在我看来,这三个容器适配器其实就是把指定的顺序容器原创 2017-11-26 17:24:40 · 2410 阅读 · 2 评论