
C++
文章平均质量分 87
私房菜
独乐乐不如众乐乐!!!!
展开
-
C++ 基础小结
由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;这里表示声明的部分是C部分。C++是C的超集,当时C和C++编译器不同,因为C++中存在函数的重载,所以在编译的时候会变成函数名加上参数类型,而C编译的时候只是函数名。调用一个类成员函数的时候,编译器会沿着类的继承链逐级的向上查找函数的定义,如果找到了,那么就停止查找了。,编译器最终选择派生类中的函数,那么就说派生类中的成员函数隐藏了基类中的成员函数,也就是说它阻止了编译器继续向上查找的行为。原创 2014-06-20 11:07:54 · 1150 阅读 · 0 评论 -
用图记忆C语言中的运算符优先级
运算符优先级以及结合方向的统计表,网上到处可见。本文画了一张图,以便记忆,喜欢的拿走!其中,取反运算符、逻辑非运算符,都属于单目运算符,优先级高于双目运算符。关系运算符中,>、>=、原创 2023-01-10 14:34:37 · 3191 阅读 · 2 评论 -
C 语言中的一些谜题(二)
下面两个文件中的简单程序,当两个文件同时参与编译能通过吗?结果又是什么?file1.cfile2.c这两个文件编译时可以通过的,但是运行时会出错。原因是在file2.c 中声明 extern int *arr 一个数组并不能得到实际的期望值,因为它们的类型并不匹配,所以导致指针实际并没有指向那个数组。修改:extern int arr[];原创 2023-01-09 21:35:27 · 1299 阅读 · 0 评论 -
C 语言中的一些谜题(一)
提问:这段代码将会输出什么内容?回答:没有任何输出从表面来看 TOTAL_ELEMENTS 得到数组的元素个数,即 7,那么 d 从-1 开始,相当于答应array 数组从第 0 个开始的所有元素。那为什么没有任何输出呢?原创 2023-01-09 20:59:43 · 860 阅读 · 0 评论 -
C++17 关键字fallthrough
但是又不想听到编译器的抱怨,该怎么样让编译器"闭嘴"呢?此时C++17中引入的。但是有些时候我们为了实现一些特定的逻辑,所以有意不加。而很多C++初学者容易犯这样的错误:在本应当在。在C++的switch语句中,如果当前。于是编译器会针对这种情况输出。编译结果如下,编译器真的"闭嘴"了。信息,提醒程序员他可能忘了加。的值为1,代码首先执行。在C++17中引入了。原创 2021-08-13 14:56:47 · 4477 阅读 · 4 评论 -
C/C++ 中问题小结
1.__cxa_pure_virtual最近开发代码出现coredump,提示__cxa_pure_virtual 调用。从字面意思就可以知道使用了纯虚函数,而实际上有纯虚函数的类是抽象类,是不能实例,更不能调用纯虚函数。出现原因:线程切换的时候, 一个清空了虚函数表,另外一个线程却正要用 构造函数调用虚函数也会出这个问题 垂悬指针也会出现这个现象,父类指针指向子类实例,子...原创 2020-04-07 10:13:45 · 1614 阅读 · 0 评论 -
深入了解C++引用
引用在使用的时候可以直接看成变量的别名,当做变量直接使用;但实质上是指针常量;引用实质是一个指针常量,所以需要在定义的时候初始化,后面是不允许改变的;引用有自己的内存空间,空间大小就是初始化时变量的地址的大小;原创 2021-01-21 16:22:48 · 435 阅读 · 0 评论 -
C++单元测试框架Google Test系列(gtest)
目录1. 前言2. 断言示例操作符<<布尔值检查数值型数据检查字符串检查显示返回成功或失败异常检查Predicate Assertions浮点型检查类型检查3. 事件机制全局事件TestSuite事件TestCase事件4. 参数化旧方案使用参数化后的方案参数化后的测试案例名类型参数化5. 死亡测试...转载 2019-11-01 16:38:47 · 3922 阅读 · 0 评论 -
C++的运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作转载 2018-01-16 11:24:12 · 846 阅读 · 0 评论 -
C++ 运算符重载详解
来源:http://blog.youkuaiyun.com/shift_wwx/article/details/79075543前言:上一篇博文 中已经将运算符重载的规则详细的列出来了,博文是转载的,写的也很详细。这一篇结合运算符总结一些例子,用于理解。一、二元运算符二元运算符需要两个参数,下面是二元运算符的实例。我们平常使用的加运算符( + )、减运算符( - )、乘原创 2018-01-17 09:18:31 · 1647 阅读 · 0 评论 -
C++ const 详解
实参中指针指向一段内存地址,调用函数之后,函数会产生一个临时指针变量,这个变量的地址肯定跟实参的指针地址不一样,但是这两指针指向的内存是同一块。但是,即使用引用,如果只是作为输入用,最好加上const 修饰,这样就不会改变实参的值,如果刻意修改,编译器会报错。value为成员变量,func函数为 const 成员函数,如果要返回 value 的引用,这里的func函数返回值必须要加上const,改为,上面的操作都是允许的,只不过需要注意的是,*p 是可以修改的,但是*pt 就不能修改。原创 2018-01-10 10:37:00 · 16216 阅读 · 6 评论 -
__BEGIN_DECLS 和__END_DECLS
在底层代码和库的头文件中经常看到 __BEGIN_DECLS 和 __END_DECLS这两个宏,一直不太理解,今天特意查了一下,才知道它有这么大的用处。我们编写代码,经常需要c和c++混合使用,为了使 C 代码和 C++ 代码保持互相兼容的过程调用接口,需要在 C++ 代码里加上 extern “C” 作为符号声明的一部分,为了简化,从而定义了上面的两个宏方便我们使用。原创 2019-03-19 14:23:39 · 6067 阅读 · 0 评论 -
c++ 四种强制类型转换介绍
c++ 四种强制类型转换介绍const_cast , static_cast , dynamic_cast , reinterpret_cast1. C风格的强制转换C风格的强制转换(Type Cast)容易理解,不管什么类型的转换都可以使用使用下面的方式.TypeName b = (TypeName)a;当然,C++也是支持C风格的强制转换,但是C风格的强制转换可能带来一...转载 2019-06-26 11:55:04 · 643 阅读 · 0 评论 -
尽量不要使用using namespace std;
《C Primer Plus (第六版 中文版 人民邮电出版社)》第九章:内存模型和名称空间 第328页:有关using编译命令和using声明,需要记住的一点是,他们增加了名称冲突的可能性。C Primer Plus (第六版 中文版 人民邮电出版社)》第九章:内存模型和名称空间 第329页:一般说来,使用using命令比使用using编译命令更安全,这是由于它只导入了制定...原创 2019-08-22 10:03:05 · 1587 阅读 · 0 评论 -
浅谈 C 字符串数组的内存布局
首先感谢秋豪大佬对文章的校对以及耐心的指导 先献上我的膝盖 or2整理了四种常见的使用 C 语言字符串数组的形式分别对这以下几种的内存布局进行分析char* array[] = { "line1", "line10", "line100", "line1000",};char **array = { "line1", "line10...转载 2019-08-27 16:49:11 · 1066 阅读 · 0 评论 -
C++ 中using 的使用
若不是特别熟悉函数指针与typedef的童鞋,我相信第一眼还是很难指出FP其实是一个别名,代表着的是一个函数指针,而指向的这个函数返回类型是void,接受参数是int, const std::string&。我想,即使第一次读到这样代码,并且不知道 C++11 using 用法的童鞋也能很容易知道 FP 是一个别名,using 的写法把别名的名字强制分离到了左边,而把别名指向的放在了右边,比较清晰。今天在看vector.h的时候,碰到一个using的奇怪用法,才疏学浅之前没有碰到过,整理一下。原创 2017-12-07 16:26:10 · 103085 阅读 · 22 评论 -
warning: ISO C++11 does not allow conversion from string literal to 'char *'
c++ 中写了一个函数:char *HdmiCecControl::getResult(int r){ switch (r) { case HDMI_RESULT_SUCCESS: return "success"; case HDMI_RESULT_NACK: return "no ack";原创 2016-10-21 14:14:17 · 21894 阅读 · 0 评论 -
C++基类指针与派生成员
本文是自己在学习了继承和派生,以及C++的多态性之后通过实例来说明继承和派生的过程,请大家不吝赐教。1、继承的方式继承方式有三种:public、private、protected。具体的不做介绍,网上有很多文章。注意的是,基类中的private成员是无法继承使用的,只能基类自己使用。protected成员也只能提供给派生类或者自己使用,对象是无法使用的。2、多态原创 2017-11-22 15:51:32 · 1209 阅读 · 0 评论 -
C++中虚函数详解三
文章出处:http://blog.youkuaiyun.com/shift_wwx/article/details/78642811前言:之前两篇博文《C++中虚函数详解一》和《C++中虚函数详解二》中详细的总结了虚函数的使用过程。这一篇总结剩下来的虚析构函数和纯虚函数。1、虚析构函数来看下实例代码:class T3Base {public: T3...原创 2017-11-27 11:24:01 · 424 阅读 · 0 评论 -
C++中虚函数详解二
前言:《C++中虚函数详解一》详细解释了在单一继承中虚函数的使用,这一文来详细解释下在多重继承中虚函数的使用。1、多重继承重写父类的虚函数原创 2017-11-24 11:15:45 · 759 阅读 · 0 评论 -
C++中虚函数详解一
前言: 长时间不做C++开发,对于虚函数这一块总是会忘记,索性总结下,下次看起来就方便了。希望高手不吝赐教。《C++基类指针和派生类成员》一文中提到了C++的多态性,都是跟基类的指针和引用有关系。而虚函数的存在就是为了动态多态的实现。本文就总结下虚函数。先来看个实例:class Base1 {public: Base1() : value(1) { cout ......原创 2017-11-23 16:59:56 · 894 阅读 · 0 评论 -
c++拷贝构造函数
对于默认拷贝构造函数,会拷贝所有的成员,如果类中有个指针成员变量,在做拷贝的时候会将之前的对象的指针成员变量的值拷贝给新建立的对象中的指针成员变量,也就是说会将指针指向的内存的地址copy过来,这样两个对象修改的将会是一个内存,释放该内存的时候也会释放两次。其原因如下:当一个对象以传递值的方式传一个函数的时候,拷贝构造函数自动的被调用来生成函数中的对象。如果一个对象是被传入自己的拷贝构造函数,它的拷贝构造函数将会被调用来拷贝这个对象这样复制才可以传入它自己的拷贝构造函数,这会导致无限循环直至。原创 2017-12-08 16:31:10 · 1150 阅读 · 0 评论 -
C++中关键字explicit
在C++程序中很少有人去使用explicit关键字,不可否认,在平时的实践中确实很少能用的上。再说C++的功能强大,往往一个问题可以利用好几种C++特性去解决。但稍微留心一下就会发现现有的MFC库或者C++标准库中的相关类声明中explicit出现的频率是很高的。了解explicit关键字的功能及其使用对于我们阅读使用库是很有帮助的,而且在编写自己的代码时也可以尝试使用。既然C++语言提供这种特性原创 2017-12-13 16:04:55 · 701 阅读 · 0 评论 -
关于C++中模板中的typename和class的区别比较
C++箴言:理解typename的两个含义问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同?template class Widget; // uses "class"template class Widget; // uses "typename" 答案:没什么不同。在声明一个 template type转载 2015-11-11 19:49:19 · 1248 阅读 · 0 评论 -
c++中模板详解
前言:在C++ template中已经详细的通过实践说明了c++ template的用法,也在typename 和class在template中的区别中解释了template中typename和class的区别。这一文结合自己的想法做一个总结。1、 函数模板和模板函数函数模板是一个抽象画的函数,区别于函数的重载。如函数的重载,多个函数除了数据类型不同,而函数算法 相原创 2017-11-30 20:12:22 · 1471 阅读 · 0 评论 -
C++ template
引言模板(Template)指C++程序设计设计语言中采用类型作为参数的程序设计,支持通用程序设计。C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream。函数模板在c++入门中,很多人会接触swap(int&, int&)这样的函数类似代码如下:void swap(int&a , int& b) { int temp = a;转载 2015-11-11 16:09:13 · 966 阅读 · 0 评论