![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
屠变恶龙之人
这个作者很懒,什么都没留下…
展开
-
c固定区间的浮点值
void main( void ){srand( (unsigned)time( NULL ) );float fRandom=((rand()%7)+3)/10.0;printf( " %0.1f\n", fRandom);system("pause");}rand()%7 产生 0 - 6 的随机数,然后加 3 就是 3 - 9 的随机数,再除10 就是 0.3 - 0.9 ...转载 2019-02-27 13:33:31 · 213 阅读 · 0 评论 -
C#/C++常见问题
什么是动态特性?在绝大多数情况下, 程序的功能是在编译的时候就确定下来的, 我们称之为静态特性。 反之, 如果程序的功能是在运行时刻才能确定下来的, 则称之为动态特性。C++中, 虚函数,抽象基类, 动态绑定和多态构成了出色的动态特性。多态,虚函数,纯虚函数多态:是对于不同对象接收相同消息时产生不同的动作。C++的多态性具体体现 在运行和编译两个方面:在程序运行时的多态性通过继承和原创 2017-03-06 19:58:51 · 460 阅读 · 0 评论 -
引用
引用的概念引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名; 如下:定义引用ra,它是变量a的引用,即别名。 int a; int &ra=a; (1)&在此不是求地址运算符,而是起标识作用。 (2)类型标识符是指目标变量的类型。转载 2017-04-06 09:39:38 · 283 阅读 · 0 评论 -
for和while/++i和i++
for和whilewhile循环: 以行读取文件,默认分隔符是空格或者Tab; 循环体内有ssh、scp、sshpass的时候,需要加上for循环:以空格读取文件,也就是碰到空格,就开始执行循环体,所以需要以行读取的话,就要把空格转换成其他字符从执行结果可以看出:while循环: wait没起到作用,循环体在后台执行,后面的命令也同时在执行;fo原创 2017-04-05 18:04:26 · 1104 阅读 · 0 评论 -
内联函数
一、什么叫inline函数? inline(小心,不是online),翻译成“内联”或“内嵌”。意指:当编译器发现某段代码在调用一个内联函数时,它不是去调用该函数,而是将该函数的代码,整段插入到当前位置。这样做的好处是省去了调用的过程,加快程序运行速度。(函数的调用过程,由于有前面所说的参数入栈等操作,所以总要多占用一些时间)。这样做的不好处:由于每当代码调用到内联函数,就需要在调用处直接插入转载 2017-04-05 09:55:58 · 185 阅读 · 0 评论 -
C/C++混合编程
1. C/C++混合编程是什么?就像问题本身所说, C/C++混合编程也就是一个工程中, 在C函数中调用C++函数的方法, 在C++的函数中能够调用C函数的方法.2. C/C++混合编程有什么用?在我们日常开发中, 也许会遇到这么一些情况, 同事A, C非常牛逼, 但是对C++一窍不通; 同事B, C++信手拈来, 但是对C却满头雾水. 但是在工作中有这么一种需求, 同转载 2017-04-05 16:29:39 · 460 阅读 · 1 评论 -
运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运转载 2017-04-05 10:15:16 · 455 阅读 · 1 评论 -
protect,public,private
理解很重要: -----------------------可见protected 和privated都是针对函数定义来说的在外部程序中都不可被调用。而public表示可以被外部调用---即---对象.方法------------------------原来我对protect的理解有误。声明为protect的函数,能在子类(中定义子类的成员函数的时候转载 2017-04-05 09:59:54 · 415 阅读 · 0 评论 -
友元函数
1.友元函数的简单介绍1.1为什么要使用友元函数在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。实际上具体大概有下面两种情况需要使用友元转载 2017-04-05 09:46:24 · 220 阅读 · 1 评论 -
纯虚函数
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:[cpp] view plain copy转载 2017-04-05 09:43:24 · 443 阅读 · 0 评论 -
查看虚函数表
上网搜了半天,没找到好的,自己看了一下,在linux的gdb环境下有比较简单的方法可以看在blog里记录一下,免得自己忘了1. 查看函数地址 看函数在代码的哪一行,使用info line就可以看到类似下面这中输出点击(此处)折叠或打开(gdb) info line a.cpp:10Line 10 of "a.cpp" starts转载 2017-03-02 11:18:36 · 1789 阅读 · 0 评论 -
析构函数为什么要为虚函数
1.为什么基类的析构函数是虚函数? 在实现多态时,当用基类操作派生类,在析构时防止只析构基类而不析构派生类的状况发生。 下面转自网络:源地址 http://blog.sina.com.cn/s/blog_7c773cc50100y9hz.html a.第一段代码 #includeusing namespace std;class ClxB转载 2017-03-23 17:11:42 · 488 阅读 · 0 评论 -
防止头文件被重复包含
在windows平台下,有一个很方便的宏: #pragma once指定当前文件在构建时只被包含(或打开)一次,这样就可以减少构建的时间,因为加入#pragma once后,编译器在打开或读取第一个#include 模块后,就不会再打开或读取随后出现的相同#include 模块.另外,还可以用条件编译语句来实现:#ifndef "XX_H"#define "XX_H转载 2017-04-16 16:18:00 · 351 阅读 · 0 评论 -
C++11新特性
什么是C++11C++11是曾经被叫做C++0x,是对目前C++语言的扩展和修正,C++11不仅包含核心语言的新机能,而且扩展了C++的标准程序库(STL),并入了大部分的C++ Technical Report 1(TR1)程序库(数学的特殊函数除外)。C++11包括大量的新特性:包括lambda表达式,类型推导关键字auto、decltype,和模板的大量改进。本文将对C++11的转载 2017-02-28 10:58:39 · 196 阅读 · 0 评论 -
排序算法
经典版冒泡排序void bubblesort(int a[], int n){ for(int i=0; i for(int j=0; j if(a[j]>a[j+1]) swap(a[j],a[j+1]);} //或者void bubblesort(int a[], int n){ f原创 2016-10-18 12:39:45 · 539 阅读 · 0 评论 -
深拷贝和浅拷贝
深拷贝和浅拷贝可以简单理解为:如果一个类拥有资源,当这个类的对象发生复制过程的时候,资源重新分配,这个过程就是深拷贝,反之,没有重新分配资源,就是浅拷贝。===============================================对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内转载 2017-03-27 10:31:35 · 387 阅读 · 0 评论 -
全局变量/局部变量
全局变量和局部变量局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用::。在函数体内引用变量会用到同名的局部变量而不是全局变量,对于一些编译器来说,在同一个函数体内可以定义多个同名的局部变量。例如我们可以在一个函数内部,在两个循环中都定义同名的局部变量i,而局部变量i的作用域在那个循环体内 具体来说,全局变量和局部变量的区别如下:1.转载 2017-04-12 17:05:25 · 567 阅读 · 0 评论 -
sizeof与strlen
概述 sizeof():是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了, 参数可以是数组、指针、类型、对象、函数等。 功能是:获得保证能容纳实现所建立的最大对象的字节大小。 strlen():是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时, ...原创 2017-06-06 23:32:10 · 315 阅读 · 0 评论 -
字节对齐
定义现代计算机中,内存空间按照字节划分,理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序一个接一个地存放,这就是对齐。原因和作用根本原因在于CPU访问数据的效率问题。某些平台对特定类型的数据只能从特定地址开始存取,而不允许其在内存中任意存放。例如Motorola原创 2017-03-21 09:51:32 · 356 阅读 · 0 评论 -
strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。voi...转载 2016-10-08 10:12:50 · 450 阅读 · 1 评论 -
动态绑定
定义 动态绑定是将一个过程调用与相应代码链接起来的行为。是指与给定的过程调用相关联的代码,只有在运行期才可知的一种绑定,他是多态实现的具体形式。原理 C++中,通过基类的引用或指针调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所原创 2017-04-11 10:48:17 · 342 阅读 · 0 评论 -
volatile
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i;转载 2017-04-17 10:41:19 · 167 阅读 · 0 评论 -
虚函数和虚析构函数的实现原理
1.总结虚函数的实现原理:当类中有虚函数或者虚析构函数时,在实例化类的对象时,对象内存中除了成员变量的大小,还有一个虚函数表指针,而且虚函数表指针放在内存的最前面,虚函数表指针会指向一个虚函数表,而以为Shape类中含有虚函数,这个虚函数表将于Shape类的定义同时出现,在计算机中虚函数表也是占用一定到的内存空间的,且虚函数表由于一旦转载 2017-03-23 17:26:05 · 1114 阅读 · 0 评论 -
右值引用和移动构造
C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是:看能转载 2017-04-20 14:10:05 · 437 阅读 · 0 评论 -
mmap
阅读目录mmap基础概念mmap内存映射原理mmap和常规文件操作的区别mmap优点总结mmap相关函数mmap使用细节回到顶部mmap基础概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自转载 2017-03-27 10:43:41 · 275 阅读 · 0 评论 -
C++中的空类,默认产生哪些类成员函数?
答:class Empty{ public: Empty(); // 缺省构造函数 Empty( const Empty& ); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=( const Empty& ); // 赋值运算符 Empty* operator&();转载 2017-04-11 10:43:53 · 204 阅读 · 0 评论 -
C/C++的内存处理函数
安大啊转载 2016-03-04 21:32:49 · 230 阅读 · 0 评论 -
查找算法
1. 顺序查找 int Sq_search(int *a, int n, int key) { for(int i=1; i { if(a[i]==key) return i; } return 0; } 2原创 2016-10-12 21:23:19 · 285 阅读 · 0 评论 -
智能指针
作用 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露。它的一种通用实现技术是使用引用计数(reference count)。原理智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象共享同一指针。每次创建类的新对象时,初始化指针并将引用计数置为1;当对象作为另一对象转载 2017-04-06 14:14:10 · 353 阅读 · 0 评论 -
网易游戏面试题
● inline关键字是做什么用的?inline关键字在什么情况下会展开失败? 代码长度过大,会导致展开失败。inline类似于将代码直接替换,但是又不是。省去了调用函数的开销。增快了代码的执行效率。sizeof一个空类是多大?为什么?编译器为什么这么做?1个字节,任何一个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的转载 2017-03-09 17:53:32 · 10397 阅读 · 4 评论 -
比较C++中的4种类型转换方式
Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意?A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。比如,为了转换一个类型为doubole的浮点数的指针到整型:代码: int转载 2017-03-02 12:47:07 · 209 阅读 · 0 评论 -
空指针和野指针
空指针常量一个表示0值的整数常量,叫做空指针常量。例如:0、0L、1-1(它们都是值为0的整数常量表达式)以及(void*)0、void* NULL 都是空指针常量,空指针常量可以赋值给任何指针类型,因为它是变体类型(void*)。但是我们更倾向于使用NULL表示这个空指针常量。对于其它方式(比如0)来表示空指针常量虽然不会产生任何问题,但是在根本意义上并不符合空指针常量的定义。因为空指针转载 2017-02-20 14:05:38 · 366 阅读 · 0 评论 -
define和const
(1) 编译器处理方式不同 define宏是在预处理阶段展开。 const常量是编译运行阶段使用。(2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开。 const常量有具体的类型,在编译阶段会执行类型检查。(3) 存储方式不同 define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。转载 2017-01-02 11:28:04 · 186 阅读 · 0 评论 -
“min”和“max” was not declared in this scope
方法1: 用程序声明、实现,然后在调用的时候才不会出错方法2: 用头文件: #include using namespace std; //这一句也不能少原创 2016-10-17 13:28:41 · 11914 阅读 · 0 评论 -
string和stringstream
一、stringstring 是 C++ 提供的字串型態,和 C 的字串相比,除了有不限长度的优点外,还有其他许多方便的功能。要使用 string, 必須先加入这一行:#include 接下來要宣告一个字串变量,可以写成:string s;我们也可以在宣告的同时让它设成某个字串:string s="TCGS";而要取得其中某一個字元,和传统C 的字串转载 2016-10-14 17:06:30 · 762 阅读 · 0 评论 -
multiple definition of 问题解决方法
问题描述:在一个头文件a.h中定义一些变量x,在其他.c文件中(b.c,c.c)要用到。用一般的全局变量的方法,编译时总是提示error:multiple definition of x问题分析:orz,我找了好久,具体原因到现在还不知道,只是有人说全局变量的定义不要放在头文件里面。看来回头要好好学习一下基础了。解决方法:1.给每一个头文件加上条件编译:转载 2016-10-25 09:46:40 · 666 阅读 · 0 评论 -
结构体的存储分配
提到结构体,相信大家都知道元素存储要对齐,话是没有错,只是这个“对齐”里面包含了很多微妙的东西。首先详细的给出结构体内存分配的原则吧:编译器按照成员列表顺序一个接一个地给每个成员分配内存。只有当存储成员时需要满足正确的边界对齐要求时,成员之间才可能出现用于填充的额外内存空间。接下来我们来慢慢理解这句话。sizeof操作符能够得出一个结构的整体长度,包括因边界对齐而跳过的那些字节。所以一般都转载 2016-08-22 12:33:25 · 931 阅读 · 0 评论