C/C++
cc4Java
技术宅
展开
-
C/C++ Unix中的环境变量environ
Unix中的环境变量environ的作用原创 2014-11-06 15:29:08 · 2971 阅读 · 0 评论 -
C/C++ restrict修饰符
restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码.如 int *restrict ptr, ptr 指向的内存单元只能被 ptr 访问到,任何原创 2014-09-27 14:15:04 · 10696 阅读 · 1 评论 -
C/C++ 使用mmap/munmap函数分配内存
在C/C++ 中常用的内存分配和管理的方式有很多,如智能指针, STL容器, new/delete, malloc/free, brk, sbrk等等,最近研究了一下Unix比较底层的一种内存管理方式mmap/munmap,需要完全自己来维护分配的虚拟内存,没有任何其他辅助的数据结构来帮助维护内存空间。一、在终端里输入 man mmap 可以查看此函数的API文档,此函数的具体描述如下:v原创 2014-09-27 12:13:56 · 20472 阅读 · 2 评论 -
C/C++函数指针参数不匹配问题
函数指针在C/C++中很常用,最近遇到了一非常有趣的问题,函数指针的参数和函数的形参个数不匹配时会遇到的问题,下面看代码。//// main.cpp// FuncPointer//// Created by ChengChao on 14-9-21.// Copyright (c) 2014年 cc. All rights reserved.//#include u原创 2014-09-21 15:50:16 · 5961 阅读 · 1 评论 -
C++中sizeof用法
说明:以下代码在VS2008中通过,在32位操作系统下。1. 定义sizeof是一个操作符(operator)。其作用是返回一个对象或类型所占的内存字节数。其返回值类型为size_t。(size_t在头文件stddef.h中定义,它依赖于编译系统的值,一般定义为 typedef unsigned int size_t;)2. 语法sizeof有三种语法形原创 2014-02-17 20:54:52 · 17733 阅读 · 0 评论 -
C++中 ++i与i++的效率比较
这个问题需要分两种情况来解说:1、当变量i的数据类型是c++语言默认提供的类型的话,他们的效率是一样的。int a,i=0; a=++i;汇编代码如下: int a,i=0;01221A4E mov dword ptr [i],0 a=++i;01221A55 mov eax,dword ptr [i]原创 2014-02-18 16:49:04 · 3243 阅读 · 0 评论 -
C++函数模板(function template)
C++提供了函数模板(function template)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。下面通过一个返回最大值的函数来举例。原创 2014-03-30 14:21:30 · 5191 阅读 · 0 评论 -
C++虚函数和纯虚函数的作用与区别
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};原创 2014-02-18 22:34:20 · 1257 阅读 · 0 评论 -
C/C++中const的用法
1. const 在C和C++中的区别C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中. 所以在C++中const修饰的量可以用在数组的定义中。而在C中,const是一个不能被改变的普通变量,既然是变量,就要占用存储空间,所以编译器不知道编译时的值.而且,数组定义时的下标必须为常量.原创 2014-02-18 21:55:11 · 1727 阅读 · 0 评论 -
C++的四种强制类型转换
C++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。C++中风格是stat原创 2014-02-18 21:24:28 · 1840 阅读 · 0 评论 -
C++遍历Vector的错误
1.vector iterators incompatible发现引发这个错误的代码如下:for (VectorType::iterator it = someVector.begin();; it != someVector.end();++it;){ if (*it== value) { someVector.erase(it); }}代原创 2014-02-17 21:25:57 · 3848 阅读 · 0 评论 -
C中setjmp和longjmp用法
C中提供了goto语法,可以通过goto跳转到函数体内部标记的某一行代码,但是却无法跳出函数之外的任意位置。为了解决这个限制,C函数库提供了setjmp()和longjmp()函数,它们分别承担非局部位置记录标号和goto作用。使用这两个函数需要包含头文件int setjmp(jmp_buf env)建立本地的jmp_buf缓冲区并且初始化,用于将来跳转回此处。这个子程序保存程序原创 2015-01-28 16:32:10 · 4607 阅读 · 0 评论