![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++/C
文章平均质量分 59
细嗅
这个作者很懒,什么都没留下…
展开
-
static的含义及用法(待补充)
转载自:http://blog.chinaunix.net/uid-23117778-id-3371774.htmlC语言中讲讲static变量和static函数有什么作用static关键字有两种意思,你看上下文来判断 1,表示变量是静态存储变量 表示变量存放在静态存储区. 2,表示该变量是内部连接 (这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上stat转载 2015-03-27 15:36:47 · 518 阅读 · 0 评论 -
C++进阶之虚函数表
C++通过继承(inheritance)和虚函数(virtual function)来实现多态性。所谓多态,简单地说就是,将基类的指针或引用绑定到子类的实例,然后通过基类的指针或引用调用实际子类的成员函数(虚函数)。本文将介绍单继承、多重继承下虚函数的实现机制。一、虚函数表为了支持虚函数机制,编译器为每一个拥有虚函数的类的实例创建了一个虚函数表(virtual ta原创 2017-08-11 22:01:25 · 335 阅读 · 0 评论 -
C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:a.引用b.常量c.静态d.静态常量(整型)e.静态常量(非整型) 常量和引用,必须通过参数列表进行初始化。 静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末。参考下面的原创 2017-08-10 21:59:17 · 1514 阅读 · 0 评论 -
C++ 智能指针详解
C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_p转载 2017-07-26 14:13:52 · 211 阅读 · 0 评论 -
C++中的静态绑定和动态绑定
C++中的静态绑定和动态绑定(感谢原作者分享:http://www.cnblogs.com/lizhenghn/p/3657717.html)C++在面向对象编程中,存在着静态绑定和动态绑定的定义,本节即是主要讲述这两点区分。我是在一个类的继承体系中分析的,因此下面所说的对象一般就是指一个类的实例。首先我们需要明确几个名词定义:静态类型:对象在声明时采用的类转载 2017-07-26 14:11:10 · 339 阅读 · 0 评论 -
C++的数组元素为什么不能是引用类型
感谢原作者分享:http://blog.xinspace.space/2015/01/25/cpp-array-element-not-ref/这几天在看c++基础内容,看到数组的时候,书里提到数组元素的约束条件:1.元素类型支持赋值操作。2.元素类型支持复制。因此,除了引用类型对象和流对象外,其他的任意内置类型和满足上述约束的类类型均能成为数组的元素。转载 2017-07-31 22:15:46 · 7089 阅读 · 0 评论 -
如何在C中调用C++函数 与 如何在C++中调用C的函数(待修改)
第一个问题:如何在C中调用C++函数网上有一翻译C++之父的文章可以作为解答,遂拿来Mark一下。 将 C++ 函数声明为``extern "C"''(在你的 C++ 代码里做这个声明),然后调用它(在你的 C 或者 C++ 代码里调用)。例如:// C++ code:extern "C" void f(int);void f(int i){ // ...原创 2017-07-13 22:00:38 · 511 阅读 · 0 评论 -
linux下动态链接库(.so)的显式调用和隐式调用
感谢原作者分享:http://blog.csdn.net/lc_910927/article/details/42393121一、显式调用和隐式调用的区别 我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使转载 2017-07-13 21:14:05 · 561 阅读 · 0 评论 -
memcpy memmove区别和实现(如何处理内存重叠问题)
memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。memmove的处理措施:(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝(3)当源内存的首地址小于目标内存原创 2017-07-12 20:47:34 · 747 阅读 · 0 评论 -
前置++ 和后置++的区别(C++ 为什么不叫++C)
这篇文章不是讨论(i++)+(i++)+(i++)的计算结果,更不是讨论(i++)+(++i)+(i++)。 在C++教程中,我们都会学到:i++和++i是两个表达式,他们都会对i进行自增,但是呢,作为表达式,i++的值是自增之前的值,++i的值是自增之后的值。 本文在此基础上,进行一些稍微深入的讨论。 从操作符重载的角度,看i++和++i的区别,是转载 2017-05-27 22:22:17 · 1201 阅读 · 0 评论 -
for循环的条件判断中为什么用'!='而不用'<'
感学原作者分享,原文地址:http://blog.csdn.net/njnu_mjn/article/details/7648730翻阅《C++ Primer中文版(第4版)》,里面出现的for大多都是类似如下的循环:[cpp] view plain copy print?vectorint> ivec(10); for (ve原创 2016-02-20 13:41:03 · 2404 阅读 · 0 评论 -
关于(void**)及其相关的理解
关于(void**)及其相关的理解#define LOADBASSFUNCTION (f) *((void **)&f)=(void*)GetProcAddress (hBass,# f)这一句话使用*((void**)&f)的原因在于,转化目标为左值(即转化f为void*类型(*)的函数指针)。注意这里的(void**)强制类型转换仅仅只是重新声明了指针解引用的方式,转载 2015-04-27 00:32:34 · 787 阅读 · 0 评论 -
c指针的一些理解
C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的:The right-left rule: Start readin原创 2015-04-27 00:20:45 · 388 阅读 · 0 评论 -
c结构体(待补充)
c 结构体 下面主要对结构体的几种声明定义方法进行一些总结归纳: 1, struct pt{ int a; }; 这里 struct pt 是一个结构体类型。但没有声明具体的变量,struct pt pt; 这里声明了一个pt变量,虽然看上去容易混淆,但是是允许的。 2 struct {原创 2015-03-27 15:41:50 · 408 阅读 · 0 评论 -
C/C++ 宏中“#"和"##”的用法
转载地址:http://www.linuxidc.com/Linux/2014-06/102924.htm一、一般用法我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.用法:#i nclude#i ncludeusing namespace std; #define STR(s) #s#define CONS(a,b) int(a##e##转载 2015-04-24 11:24:19 · 546 阅读 · 0 评论 -
C语言宏定义中#和##的作用(需要对两片博文进行整理)
对于c语言中宏定义的#,##,第一个要说明的作用就是:前者将宏定义的变量转化为字符串;后者将其前后的两个宏定义中的两个变量无缝拼接在一起转化为字符串。 第一个作用是关于在宏定义中阻止宏定义的递归展开(例如很方便实现枚举变量的字符串显示)。而使用了上述符号,只要通过中间的转换宏,也可以实现参数宏的展开。此处主要擦考两篇博文进行思考:http://my.oschina.net/sh原创 2015-04-24 11:03:16 · 578 阅读 · 0 评论 -
__FILE__,__LINE__(注意这里是两个_)
注:本文转自蚂蚁跳楼博客园,感谢作者整理 前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式转载 2015-04-24 13:12:27 · 542 阅读 · 0 评论 -
scanf()函数与gets()函数的区别
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结束*/scanf("%s",string); /*遇到原创 2015-04-13 13:17:18 · 424 阅读 · 0 评论 -
浅谈C++容器
感谢原作者分享:http://www.cnblogs.com/yymn/p/5157841.html浅谈C++容器(一)在面向对象的语言中,大多引入了容器的概念。那么 什么 是 容器?实质上就是一组相同类型对象的集合,但是它又不仅仅像数组那样简单,它实现了比数组更复杂的数据结构,当然也实现了比数组更强大的功能。C++ 标准模板库里提供了10 种通用的容器类,它基本上转载 2017-08-13 20:52:08 · 387 阅读 · 0 评论