C/C++
文章平均质量分 70
lvyilong316
这个作者很懒,什么都没留下…
展开
-
"undefined reference to" 问题解决方法
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误:(.text+0x13): undefined reference to `func' 关于undefined reference这样的问题,大家其实经常会遇到,在此,我以详细地示例给出常见错误的各种原因以及解决方法,希望对初学者有所帮助。1. 链接时缺失了相关目标文件(.o)转载 2013-04-01 10:16:37 · 566 阅读 · 0 评论 -
C++构造函数、拷贝构造函数、赋值运算符漫谈(三)——NRV
//首先看下面一段程序:class X{public: X() { cout<<"X()"<<endl; }; X(int v):val(v) { cout<<"X(int)"<<endl; } X(const X& x) { cout<<"X(const X& x)"<<endl; } X& operator=(const X&) { cout<<"="原创 2014-03-27 00:10:42 · 726 阅读 · 0 评论 -
C++构造函数、拷贝构造函数、赋值运算符漫谈(一)——函数参数传递
在讨论C++函数参数之前,我们先来看一下C程序是如何调用函数的。 如图,为C语言的函数调用记录,C++也类似。当有如下函数:void foo(X x0);如果有如下调用方式:X xx;foo(xx); 编译器(对于C)会将实参xx以“位逐次拷贝”方式复制给形参x0(注:X0即在上图函数活动记录中的参数位置)。在C++中,如果一个Class也展现了“位逐次拷贝语义”原创 2014-03-26 23:03:21 · 655 阅读 · 0 评论 -
NULL, 0, 空格与'0','\0'
NULL其实是一个宏,定义为0,#include 里是:#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif#endif 判断指针是否为空时,p==NULL, 或p==0是一样的意思,但习惯用NULL更好。 后面的空格(' ')与'0',转载 2014-04-07 11:18:22 · 640 阅读 · 0 评论 -
C++数据成员
Static成员class B{public :static int val;};int B::val=0;class D :public B{ };int _tmain(int argc, _TCHAR* argv[]){B::val=5;cout <<D::val<<endl;//5}说明:static成员变量在继承体系中只有一份,其访问方式限制(原创 2014-04-04 00:13:58 · 939 阅读 · 0 评论 -
C++虚继承
首先看一段代码:class B{public :int b;};class D: virtual public B{public :int d;}; int _tmain(int argc, _TCHAR* argv[]){cout<<sizeof(D)<<endl;}; 在vs输出12,当将virtual关键字去掉之后,输出8;可见虚拟继承需要额原创 2014-04-04 00:24:03 · 819 阅读 · 0 评论 -
C语言中的字节对齐
一、什么是字节对齐一个基本类型的变量在内存中占用n个字节,则该变量的起始地址必须能够被n整除,即: 存放起始地址 % n = 0,那么,就成该变量是字节对齐的;对于结构体、联合体而言,这个n取其所有基本类型的成员中占用空间字节数最大的那个;内存空间是以字节为基本单位进行划分的,从理论上讲,似乎对任何类型的变量的访问都可以从任何地址处开始,但实际情况是在访问特定类型变量的时候经常是从特定的内转载 2014-04-01 20:11:17 · 685 阅读 · 0 评论 -
漫谈析构函数(一)——从一个面试题开始
漫谈析构函数(一)——从一个面试题开始原创 2014-03-31 23:01:40 · 808 阅读 · 0 评论 -
C++箭头(->)运算符的重载
箭头操作符(->)的通常用法是,使用一个类对象的指针来调用该指针所指对象的成员。左操作数为对象指针(this),右操作数为该对象的成员名称。定义重载箭头操作符之后看起来就有点特别,可以用类对象的指针来调用,也可以用类对象直接调用。重载箭头操作符必须定义为类成员函数。箭头操作符与众不同。它可能表现得像二元操作符一样:接受一个对象和一个成员名。对对象解引用以获取成员。不管外表如何,箭头操作符不接受原创 2014-04-14 21:52:41 · 1215 阅读 · 0 评论 -
C++构造函数、拷贝构造函数、赋值运算符漫谈(二)——函数返回值
首先我们先看一下C程序的返回值处理情况,我们知道当C函数返回int等小型数据时直接将返回值放入eax寄存器。那当返回大的数据结构又是如何处理呢?看如下一段代码:#include typedef struct big_thing{char buf[128];}big_thing;big_thing return_test(){big_thing b;b.buf[0]=0;r原创 2014-03-26 23:44:06 · 637 阅读 · 0 评论 -
语言变量声明内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。2、堆区(heap) — 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全原创 2013-03-24 22:45:04 · 536 阅读 · 0 评论 -
自动、静态、 寄存器、易失变量的区别 .
(一)自动变量 什么是自动变量呢?自动变量就是指在函数内部定义使用的变量。他只是允许在定义他的函数内部使用它。在函数外的其他任何地方都不能使用的变量。自动变量是局部变量,即它的区域性是在定义他的函数内部有效。当然这说明自动变量也没有链接性,因为它也不允许其他的文件访问他。由于自动变量在定义他的函数的外面的任何地方都是不可见的,所以允许我们在这个函数外的其他地方或者是其他的函数内部定义同转载 2013-03-19 15:40:36 · 587 阅读 · 0 评论 -
C&C++混合编程
首先,混合编程不是指在同一个文件里写C与C++。混合编程包括:1,C++引用C的头文件;2,g++生成的.o与gcc生成的.o相链接。一、extern“C”的作用(最重点) 1. extern "C"的真实目的是实现类C和C++的混合编程。extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。extern “C”后面的函数不使用的C++的名字修原创 2014-04-09 23:46:40 · 1046 阅读 · 0 评论