
C++
我爱默小兜
热爱编程,热爱生活
展开
-
C++中宏和函数的区别
宏和函数写法以及调用方式,有很大的相似,但是他们却存在本质上的区别,函数调用时将实参表达式值求出来,然后赋值给形参,计算结果,而宏则是对实参表达式不做计算,直接替换。eg:int fun(int y){return y*y;}#define FUN(y) y*y;int tmp=3;int a=fun(++tmp); //16tmp=3;int b=FU原创 2016-01-11 20:45:55 · 1498 阅读 · 0 评论 -
C++的|、||、&、&&、异或、~、!运算
位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 其中,按位取反运算符是单目运算符,其余均为双目运算符。 位运算符的优先级从高到低,依次为~、&、^、|, 其中转载 2016-03-23 10:42:09 · 2339 阅读 · 0 评论 -
C++中const int *、int *const 以及int const*区别
关于指针,我们首先要弄清楚四点:指针类型、指针指向类型、指针的值、指针指向的值。如果这一点不是很清楚,请参考这里 网址:http://blog.youkuaiyun.com/hsd2012/article/details/50946407当const修饰的是指针类型,那么指针的值就不能改变,即不能指向其他地址,但是可以通过指针修改其指向地址里面的值。当const修饰时指针指向的类型时候,那么指针被原创 2016-03-23 15:55:50 · 11229 阅读 · 0 评论 -
fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h
错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?错误分析: 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束。没有找到预编译指示信息的头文件"stdafx.h"。 (因为工程中的每个cpp文件属性默原创 2016-03-23 17:49:41 · 701 阅读 · 0 评论 -
C++中运算符重载详解
一、运算符重载的格式运算符重载为类的成员函数的一般格式为: 函数类型> operator 运算符>(参数表>) { 函数体> }二.可以重载的运算符(运算符的限制)1.可用作重载 算术运算符:+,-,*,/,%,++,--; 位操作运算符:&,|,~,^,> 逻辑运算符:!,&&,||;原创 2016-03-23 20:13:21 · 526 阅读 · 0 评论 -
C++宏定义需要注意的细节
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但如果我们不需要到一些细节,很容易因为这个简单的宏定义引发难以预料的问题宏的定义(1)简单的宏定义:#define 宏名> 字符串>例: #define PI 3.1415926(2) 带参数的宏定义原创 2016-03-24 09:15:35 · 2201 阅读 · 0 评论 -
c/c++中使用sizeof计算结构体struct和类class的长度(字节)
前言在默认情况下,为了方便对结构体内元素的访问和管理,当结构体内的元素长度都小于处理器的位数的时候,便以结构体内最长的数据元素为对齐单位,也就是说,结构体的长度一定是最长的数据元素的整数倍。如果结构体内存在的长度大于处理器位数的,那么就以处理器的位数为对齐单位。结构体内类型相同的连续元素,将在练习的空间内,和数组一样。多说无益,直接看程序。struct {short a1;short原创 2016-03-24 09:44:10 · 5261 阅读 · 0 评论 -
C++在继承中虚函数、纯虚函数、普通函数详解
1.虚函数(impure virtual) C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。 子类可以重写父类的虚函数实现子类的特殊化。 如下就是一个父类中的虚函数:class A{public: virtual void out2(string s) { cout"A(out2转载 2016-03-25 10:25:52 · 965 阅读 · 0 评论 -
各种排序算法汇总详解
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序转载 2016-03-26 21:04:18 · 515 阅读 · 1 评论 -
一个简单的程序教你区分C++中strlen与sizeof
关于C++中的strlen与sizeof,很多时候,如果不注意还是会弄混的,今天特意总结一下sizeof求占用内存的大小strlen求的字符串的长度#includeusing namespace std;int main(){ char man[12]={"hello world"}; cout<<"strlen(man)"<<strlen(man)<<endl; /原创 2016-03-27 21:44:33 · 1155 阅读 · 0 评论 -
C++并行开发Pthread之线程(一)
线程对象pthread_t属性:竞争范围、栈大小、栈地址、分离状态、调度策略和参数状态:可运行、运行、停止、休眠(阻塞)Pthread库可用于创建、维护和管理多线程和应用程序中的线程。 1.创建线程int pthread_create(pthread_t * restrict thread,const pthread_attr_t *restrict attr,void原创 2016-03-19 21:19:59 · 3756 阅读 · 0 评论 -
vs2010下配置pthread环境详解
1.下载pthread 的windows安装包可以从官方网站上下载,网址:http://sourceware.org/pthreads-win32下载之后解压,放置在C盘如下图:2.配置VS2010打开vs2010,项目->属性->配置属性->VC++目录,包含目录里添加inlude路径;在库目录那一栏添加lib路径添加库目录的时候,根据自己的系统选择;原创 2016-03-19 11:51:42 · 8850 阅读 · 5 评论 -
关于浮点数转换为整数的(int )和(int &)形式
要区分转换,是包含值的转换与地址的转换。float a=1.0f;std::coutstd::coutstd::cout机子上的输出是:110661920770可以这样理解:(int)a 是把浮点数a的数学数值转化成int型,即保留了其整数部分(int&)a 等价于 *((int*)&a),即是将浮点数a的内存存储结构按照int型来解释,由于浮点转载 2016-03-23 09:51:11 · 4710 阅读 · 0 评论 -
C++中sizeof详解
void main() { int a[2][2]={1,2,3,4};//这是一个2*2的二维数组 int (*p)[2];//数组指针 p=a;//令p指向数组a printf("%d\n%d\n",sizeof a,sizeof p); }猜一猜输出是什么?困惑了吗?为什么结果会是这样转载 2016-03-22 15:13:20 · 1215 阅读 · 0 评论 -
C++中预处理(条件编译)
c++预处理包含1.宏定义2.文件包含3.条件编译4.#error命令5#line命令。现在该说说条件编译了。C++中条件编译有三种形式 1.#ifdef形式#ifdef 标识符 {程序段1}#else {程序2}#endif如果标识符被定义了,则执行程序段1,否则执行程序段2 其形式也可如下#ifdef 标识符 {程序段1}#endif2.#ifndef形式#if原创 2016-01-11 21:44:15 · 543 阅读 · 0 评论 -
C++中预处理(宏详解)
宏是指使用一个标识符来表示一个常量、表达式或是格式串。在编译预处理阶段,程序中所有出现的宏名会被替换。作用:1.提高程序的通用性与易读性2.便于修改C++中有定义宏不带参数宏定义格式 #define 标识符名 字符串#表示这是一条预处理命令。标识符名 即宏名,宏名一般都是用大写字母。字符串可以为常数、表达式、格式串eg:#define IP 192.16原创 2016-01-11 20:27:39 · 1117 阅读 · 0 评论 -
C++中预处理(文件包含include)
C++中,文件包含有两种方式,一种是第一种方式#include 第二种方式#include “iostream”第一种方式,使用合理使用包含文件一般说来,常量、全局变量,函数声明包含在头文件(.h)中,其定义放在.cpp文件中,使用时候,包含对应的头目录即可。原创 2016-01-11 21:16:43 · 1087 阅读 · 0 评论 -
计算X转为二进制后,包含1的数量
#includeint func(int x){int count=0;while(x){count ++;x=x&(x-1);}return count;}void main(){cout }原创 2016-02-16 16:07:14 · 799 阅读 · 0 评论 -
C++运算符优先级列表
PrecedenceOperatorDescriptionExampleAssociativity1()[]->.::++--Grouping operatorArray accessMember access from a pointerMember access from an object原创 2016-02-16 20:36:57 · 1022 阅读 · 0 评论 -
C++二分法
/***param arr 有序数组*param n 数据长度*param key 查找关键字*/int search(int arr[],int n ,int key){int maxkey=n-1,minkey=0,midkey;while(maxkey>=minkey){midkey=(maxkey+minkey)/2;coutif(arr原创 2016-02-18 20:31:37 · 860 阅读 · 0 评论 -
关于VC中 error C2871: 'std' : does not exist or is not a namespace
#include using namespace std;然后编译时出现 error C2871: 'std' : does not exist or is not a namespace查了一下,原来 C++有两个不同版本的头文件。引入名字空间这个概念以前编译器用的是#include ,而引入名字空间的概念以后std名字空间的头文件名字变成了。是比较老的C++的头文件原创 2016-03-19 10:19:13 · 13941 阅读 · 0 评论 -
C++中restrict修饰符作用
今天查看POSIX的API时候,发现里面有一行int pthread_create(pthread_t * restrict thread,const pthread_attr_t *restrictattr,void *(*start_routine)(void*),void*restrict arg);开始和不解为什么变量前面要加上restrict修饰符呢?restrict是限制原创 2016-03-19 15:45:51 · 9569 阅读 · 0 评论 -
C++中static_cast, dynamic_cast, const_cast探讨
首先回顾一下C++类型转换:C++类型转换分为:隐式类型转换和显式类型转换第1部分. 隐式类型转换又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 int ival = 3;double dval = 3.14159;转载 2016-03-19 16:09:06 · 624 阅读 · 0 评论 -
C++/C中指针详解
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: int *ptr; char *ptr; int **ptr; int (*ptr)[3];转载 2016-03-21 14:43:55 · 1225 阅读 · 0 评论 -
#include<string>与#include<string.h>的区别
为什么下面这段代码#include void main(){ string aaa= "abcsd d"; printf("looking for abc from abcdecd %s\n", (strcmp(aaa,"abc")) ? "Found" : "Not Found");}不能正确执行,说是strin转载 2016-03-22 11:39:03 · 704 阅读 · 0 评论 -
什么时候要用虚析构函数?
什么时候要用虚析构函数?通过基类的指针来删除派生类的对象时,基类的析构函数应该是虚的。否则其删除效果将无法实现。一般情况下,这样的删除只能够删除基类对象,而不能删除子类对象,形成了删除一半形象,从而千万内存泄漏。原因:在公有继承中,基类对派生类及其对象的操作,只能影响到那些从基类继承下来的成员。如果想要用基类对非继承成员进行操作,则要把基类的这个操作(函数)定义为虚函数。那么,转载 2016-04-23 17:04:28 · 922 阅读 · 0 评论