![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++进阶
文章平均质量分 56
q__y__L
学习方向是大数据,模式识别。。。微
展开
-
C++类型转换之dynamic_cast
C++提供了一种新的类型转换运算符,专门用于继承的情形,这种情形在c语言中不存在。再说dynamic_cast之前,我想先说说static_cast \quadstatic_cast用于在相关类型的指针之间进行转换,还可以显示地执行标准数据类型的类型转换—这种转换原本将自动或隐式进行。用于指针时,static_cast实现了基本的编译阶段检查。确保指针被转换为相关类型。这改进了c风格类型转换,在c语翻译 2016-04-12 23:45:13 · 638 阅读 · 0 评论 -
右值引用与移动构造函数的一点理解
说明:右值引用是c++11中的新特性,本来c++中是有一个左值引用的,引入右值引用后,多了很多概念,再看prime的时候,就觉得似乎让c++更繁琐了。偶然在知乎上看到这个话题,于是有了一点理解,遂记录于此。知乎链接大象与冰箱我们还是从大象与冰箱的故事说起。大象装入冰箱是一个很麻烦的过程,因为大象很大,假设可以装入冰箱。那么如何把大象装入另外一个冰箱。 c++有2种方案:我们先利用量子技术分析冰箱原创 2017-03-30 20:23:46 · 2136 阅读 · 1 评论 -
位运算中的小技巧
以前在我看来,位运算是一个可有可无的东西,但是随着经验的积累,发现位运算有时候能有效的解决特定的问题,以及提高程序的效率,所以下面有几个比较实用的技巧供大家参考。结构体中实现位段 c语言结构体可以实现位段,它的定义形式是在一个定义的结构体成员后面加上冒号,然后是该成员所占用的位数。位段结构体成员必须是int或者unsigned int类型,位段在内存中的存储方式是由具体的编译器决定的。 如下:原创 2016-12-30 22:16:30 · 563 阅读 · 0 评论 -
c/c++程序内存分配
系统蓝屏,很大原因都是系统自身代码有缺陷引起的,而系统代码缺陷很大程度是内存分配不当有关。由于内存分配不当引起的堆栈溢出,缓冲区溢出等问题,常常导致系统瘫痪甚至崩溃,所以理解内存分配对程序员很重要。内存区段BBS段:BBS(Block Started by Symbol)译为由符号起始的区域块。该段通常用来存放程序中未初始化的全局数据和静态数据。BBS属于静态内存分配,程序结束后静态变量资源由系统转载 2016-12-28 15:39:31 · 702 阅读 · 0 评论 -
ASSERT的作用
ASSERT一般称为断言,它是一个调试程序经常使用的宏。ASSERT定义在头文件<assert.h>头文件中,通常对于程序中出现了非法数据,在程序运行时计算括号内表达式的值。如果表带是的值为false(0),程序报告错误,终止运行,以免导致后续严重错误;如果表达式的值不为0,则继续执行后面的语句。特别说明ASSERT()捕获的时非法情况,而非错误情况,错误情况是必然存在的,并且一定需要作出相应的处理转载 2016-12-23 20:57:32 · 1104 阅读 · 0 评论 -
volatile在程序设计中的应用
记得在学习c语言时,大部分关键字都是知道的,有那么一两个关键字好像没怎么见过,其中这里的volatile就是一个,那么它到底有什么用呢?不得不说这个关键字真的很少用,估计不少同学大学毕业了都没用过,不过再某些特定场合确有奇效。 好了,闲话休庭,言归正传!想象一下你编写了一个多线程应用,变量的值可能因为别的线程而改变了,而寄存器的值不会相应的改变,从而造成程序读取的值和实际值不一致。例如,在本次线程转载 2016-12-23 20:25:00 · 626 阅读 · 0 评论 -
静态变量的一点小知识
大家先看一个简单的代码,想想它的结果会是什么?#include <iostream>using namespace std;void fun(int i){ static int value=i++; value=i++; cout<<value<<endl;}int main() { // your code goes here fun(0);原创 2016-12-23 10:26:25 · 733 阅读 · 0 评论 -
c++博客资源链接整理(逐步扩充)
这里整理了一些关于c++博客的连接,方面忘记的时候查看,相比搬运过来会更加省事。关于c++静态成员的讲解博客 http://www.cnblogs.com/morewindows/archive/2011/08/26/2154198.html关于c++IO类的一些基础知识 http://www.cnblogs.com/ronny/p/3717713.html (此文大部分也是摘录c++Pr原创 2016-11-13 12:12:03 · 562 阅读 · 0 评论 -
wchar_t类型字符串的处理
作者在vs下新建一个控制台程序,想获取命令行参数,并显示,结果发现第二个参数的类型是TCHAR数组指针,如果用printf函数显示,如果命令行参数里面有汉子,则会出现乱码,楼主查了一下,发现有人提问了,觉得解决的和好,在此记录一下:#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc, _TC转载 2016-05-09 15:06:29 · 3817 阅读 · 0 评论 -
C++函数名作为参数的技巧
c++调用函数,一般我们都是直接编写一个函数然后在主函数懂调用,如下:#include<iostream>using namespace std;int add(int a,int b){ return a+b;}void main(){ printf("%d\n",add(3,7));}但是想象我们要编写一个计算机程序,里面有很多运算符,每个运算符都需要编写一个函数,原创 2016-05-08 22:20:31 · 10097 阅读 · 0 评论 -
c++ lambda表达式
c++lambda表达式是c++11中的新增特性,最开始知道lambda表达式的时候,是学习python,python中的lambda表达式是用于简化函数编写,同样,我认为c++引入这个也是为了方便,lambda表达式并非不可替代,但是合理用lambda表达式,可能会事半功倍,至少也能少打一些字吧。\quad我在前面讲函数对象时说到过很多stl算法都需要一元谓词,二元谓词,先看一个例子:templa翻译 2016-04-21 16:33:41 · 609 阅读 · 0 评论 -
C++函数对象-谓词
函数对象(也叫functor),听起来或许有点陌生,但他们是c++实体,即使你没有用过,也一定见过,只是你没有意识到而已。从概念上讲,函数对象时用作函数的对象;但是从实现上来说,函数对象时实现了 operate()的类的对象。虽然函数和函数指针也可以归为函数对象,但实现了operate()的类的对象才能保存状态,才能用于STL。\quad我们直接看定义: - 一元函数:接受一个参数的函数,如f(x翻译 2016-04-20 23:34:29 · 2621 阅读 · 0 评论 -
运算符重载之转换运算符
我们知道c++中,cout<<3、cout<<"hello"是没有问题的,但是若你声明了一个类Fish,想输出类的相关信息,使用cout<<Fish是无法正确被识别的。当然你可以申明一个类成员函数print(),调用Fish.print(),但是我们可以重载转换运算符,使得输出根伟方便我们知道c++中,cout<<3、cout<<"hello"是没有问题的,但是若你声明了一个类Fish,想输出类的相翻译 2016-04-11 10:33:46 · 930 阅读 · 0 评论 -
虚函数的工作原理--虚函数表
请看下面的Base类,它申明了N个虚函数:class:Base{public: virtual void func1() { //Func1 implementation } virtual void func2() { //Func2 implemetation } //..so on and so for转载 2016-04-10 16:51:39 · 675 阅读 · 0 评论 -
关于C++中getline()函数的一个陷阱
最近写代码的时候遇到一个问题,就是getline函数接受标准输入(键盘)时,失效了。请先看代码:#include<iostream>#include<vector>#include<string>using namespace std;int main(){ cout<<"your age:"<<endl; int a; cin>>a; string str1原创 2016-04-07 20:26:05 · 5876 阅读 · 3 评论 -
C++中的为什么需要虚析构函数
让我们先看一个简答的例子:#include <iostream>using namespace std;class Fish{public: Fish() { cout << "Constructed Fish" << endl; } ~Fish() { cout << "Destroyed Fish" << endl; }};cl翻译 2016-04-10 11:53:32 · 854 阅读 · 0 评论 -
使用宏避免多次包含
\quad在写程序是时考虑这样一种情况:如果头文件class1.h中声明了一个类,而这个类将class2.h中的声明作为类成员,则需要在class1.h中包含class2.h。如果设计非常复杂,即第二个类也需要第一个类,则class2.h中也包含class1.h.\quad然而在处理器看来,两个头文件彼此包含会导致递归问题,为了避免这种问题,可以结合使用宏以及预处理器编译指令#ifdef和#endi转载 2016-04-13 12:04:57 · 772 阅读 · 0 评论 -
C++设计及一个不可被继承的类
如何设计一个不可被继承的类?下面有三种方法,其中第二种方法很巧妙,在第三种方法出现之前,第二种方法应该是很好的解决办法了。1. 粗糙的方法 为了让类不能够被继承,一个办法就是使得子类不能构造父类的部门,也就是子类无法实例化整个类。在C++中子类构造函数会自动调用父类的构造函数,子类的析构函数也会调用父类的析构函数,所以紫瑶吧类的构造函数和析构函数都定义为私有类型即可达到目的。 但是问题来了:原创 2017-10-22 23:39:57 · 523 阅读 · 0 评论