C/C++
文章平均质量分 76
舒夜无痕
2011年6月毕业于某大学计算机科学与技术学院,后继续攻读研究生,是一个标准的堕落过的大学生,一直在自我救赎。目前就职于某IT公司,做推荐系统开发工作
展开
-
序——写在前面的
最近一直不大想去上自习,看来需要换一种学习的方式。计算机这一行业的水很深,需要学习的东西也特别多,在广泛的学习的同时还要进行深入的学习。正是意识到这一点,最近一直抱着本书去上自习,但是现在看来,收获很多,但是效率并不高。一者现在的心不是很静,要很专心的去看书是一件很难的事情,二者原创 2011-10-02 10:40:05 · 1143 阅读 · 0 评论 -
sizeof浅析(三)——求类的大小
sizeof求类的大小和求结构体的大小,有一定的相似性,但又不完全相同,因为类存在这继承和派生、存在着虚函数。1、空类大小对于一个空类,使用sizeof求得其大小为1。2、简单类如下定义一个类,class A{public: int a;private: char b;}; 使用sizeof求这种简单类,结果和求结构体的sizeof是一原创 2013-08-24 11:22:34 · 8662 阅读 · 3 评论 -
学习心得——字符串
字符串在编程中出现的特别频繁,学好C++必须要会用字符串。 C++非常灵活,它对字符串的处理有多种方式,这里列举使用的最多的两种:字符串(string)和C风格字符串(C-Style character String)。前者是C++语言中常用的处理方式,后者是C原创 2011-10-09 20:12:47 · 3646 阅读 · 0 评论 -
char str[]与char *str的区别
在C语言中,对字符串的操作主要有两种方式,一是使用字符数组,char str[];二是使用字符指针。那么二者有什么区别呢?下面将分述二者的使用,最后进行比较。一、字符数组 使用char str[]定义一个字符数组str,中括号内可以写上数字表示数组大小,也可以不写。如果不写数字,则必须为字符数组提供初始值,以便编译器进行内存分配。可以使用字符串字面值(string原创 2013-08-27 16:45:21 · 32312 阅读 · 5 评论 -
C++的引用使用
引用是C++中一个很重要的概念。英文为reference,引用定义了对象的一个别名。当对象的值修改时,引用会发生对应的改变;当引用的值发生改变时,被引用的对象的值也发生变化,因为对象和对象的应用操作的是同一地址单元。1、引用的定义 使用int & a = b;即可定义整型变量b的引用a。 (1)由于引用是对象的别名,因此引用在定义的时候就必须初始化。int原创 2013-08-18 10:27:34 · 1015 阅读 · 0 评论 -
如何限制对象只能建立在堆上或者栈上
在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。 动态建立类对象,是使用new运算符将对象建立在堆空间原创 2013-09-25 10:32:57 · 10580 阅读 · 5 评论 -
C++中那些不常用的关键字
C++有很多关键字,比如if、else、for、continue、break这类常用关键字。还有一些使用不是很频繁的关键字,容易被忘记,这里总结一下,对于笔试面试也许会有帮助。1、explicit 这个关键字对于好的代码是必要的。 使用explicit关键字,将构造函数声明为显式构造函数,以防止隐式的类型转换。 class Test{pu原创 2013-11-22 11:02:46 · 2689 阅读 · 0 评论 -
C++中的case标签
switch case语句在C++程序中使用的较为频繁,但是有很多细节可能平时不会注意到,本文总结一下switch case语句中的case标签。1、case是标签 先来说下标签(label)。如下一段代码:#includeusing namespace std;int main(){ http://www.csdn.net cout<<"hello原创 2014-03-20 21:34:47 · 12884 阅读 · 2 评论 -
大端模式和小端模式转化
在工作中遇到一个问题,数据是以大端模式存储的,而机器是小端模式,必须进行转换,否则使用时会出问题。一、定义:大端模式(Big Endian):数据的高字节,保存在内存的低地址中;数据的低字节,保存在内存的高地址中。小端模式(Little Endian):数据的高字节,保存在内存的高地址中;数据的低字节,保存在内存的低地址中。例如:16位宽的数0x1234,在不同的模式下,存储方原创 2015-01-18 12:20:41 · 42568 阅读 · 0 评论 -
C++使用curl_easy_setopt()获取内容不完整
最近在代码中发现一个问题,我们的C++框架中,使用Curl来获取数据,但是若数据长度较多时,获取的数据不完整,只有后半部分,推测是由于接受数据的缓冲区设置过小造成的。后来调大了缓冲区,问题还是没有解决。 在我们的代码中,使用curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_memory_callback);函数来原创 2014-03-21 20:14:29 · 9250 阅读 · 0 评论 -
sizeof浅析(一)——求结构体大小
运算符sizeof可以计算出给定类型的大小,对于32位系统来说,sizeof(char) = 1; sizeof(int) = 4。基本数据类型的大小很好计算,我们来看一下如何计算构造数据类型的大小。 C语言中的构造数据类型有三种:数组、结构体和共用体。 数组是相同类型的元素的集合,只要会计算单个元素的大小,整个数组所占空间等于基础元素大小乘上元素的个转载 2013-04-14 22:34:36 · 30323 阅读 · 4 评论 -
sizeof浅析
sizeof是面试笔试中一个常见的考点,这里总结一下关于sizeof的知识。一、sizeof概念 sizeof不是函数,而是操作符。该操作符在C++中的优先级为3,比* 、/、%运算的优先级高,和负号、正号、取地址、指针等运算符同一级别。 sizeof的返回值为size_t,在头文件中被定义为unsigned int类型。 sizeof的作原创 2013-08-23 17:02:10 · 2047 阅读 · 0 评论 -
sizeof浅析(二)
1、什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value转载 2013-08-23 23:58:21 · 1614 阅读 · 0 评论 -
学习心得——C++中的面向对象思想
C++语言是C语言的拓展,C语言是面向过程的,C++在C的基础上增加了面向对象的方法。 所谓面向过程的编程思想,就是分析解决问题的步骤,将这些步骤用一个个函数实现,最后一个个调用。 所谓面向对象的编程思想,就是将任何事物都看成一个对象,对象有各原创 2011-10-02 11:21:06 · 4713 阅读 · 1 评论 -
学习心得——参数传递
函数的参数传递(parameter passing)有三种类型:实参值传递(argument value passing)、指针传递(pointer passing)和引用传递(reference passing)。其中实参值传递和指针传递本质上是相同的,传递的是变量的。引用传递原创 2011-10-02 16:36:17 · 1605 阅读 · 1 评论 -
学习心得——构造函数
类中一个很重要的概念就是构造函数(constructor)。一、定义 (1)构造函数,顾名思义,就是起到构造作用的函数。当我们创建类的一个对象时,会自动调用构造函数。构造函数是对象调用的第一个函数,它不需要用户显式调用,也不能由用户显式调用,只会在对象创建时执行。 (2)构造函数的作用:构造函数用来确保每个对象的所有数据成员都有一个明显的初始值(sensib原创 2011-10-21 23:41:40 · 1724 阅读 · 0 评论 -
学习心得——从静态成员看类的抽象性
静态(static)成员是C++中类的一种特殊的成员。 在程序中,我们有时希望多个对象公用一个变量,但是使用全局变量会破坏类的封装性。静态成员就是为解决此问题而设计。静态成员的作用域在整个类中,它有全局变量的优点,又不会像全局变量那样破坏类的封装性。 一、静态成员的定义 在类中,在成员函数名或者成员变量名前添加static关键字,则声明此成员为静态成员。原创 2011-10-24 17:38:03 · 1249 阅读 · 0 评论 -
学习心得——析构函数
C++的类中有两种函数非常特别,一种是构造函数(constructor),另一种是析构函数(deconstructor)。在上篇文章中已经讲述了构造函数,本文将讨论析构函数。 当我们定义了类的一个对象时,就会隐式的调用构造函数,构造函数执行完成后,对象就有了资源。当我们不需要该对象时,即程序运行到对象作用域之外时,会隐式的调用析构函数,析构函数执行完成后,对象的资源就被释放。原创 2011-10-23 18:29:54 · 7350 阅读 · 3 评论 -
C++中数组下标可以为负数
今天看到一个很有意思的事,C++中的数组下标可以是负数。实验了一下,还真有这么回事。 负数是可以被数组识别的,如果定义了一个数组int a[5],直接输出a[-2]的值,不同的编译器给出的是不同的值,肯定不是数组的值。 可以使用指针指向数组的某个元素,然后递减,如下程序:int main() { int a[ 5 ] = { 0, 1原创 2011-12-05 22:47:29 · 11102 阅读 · 1 评论 -
C++中的头文件和源文件
一、C++编译模式 通常,在一个C++程序中,只包含两类文件——cpp文件和h文件。cpp文件被称作C++源文件,里面放的都是C++的源代码;h文件则被称作C++头文件,里面放的也是C++的源代码。 C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里转载 2012-09-11 19:55:27 · 6721 阅读 · 0 评论 -
VS中C++代码折叠
用VS编写C#时,可以用#region name和#endregion,将代码分段,这样可以将代码折叠起来,当类过大,方法过长时,这种方法可以提高阅读效率,是人看着更舒服。 对于C/C++语言,#region失效。这不免让人郁闷。 VS对C/C++语言,默认仅折叠预处理命令(#include, #pragma等)、类、函数等。如果某个函数特别长,大大超出了屏幕范围,原创 2012-09-04 10:48:30 · 22110 阅读 · 3 评论 -
C++中堆和栈内存分配
一个由C/C++编译程序占用内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量值等。其操作方式类似于数据结构中栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—,全局变量和静态变量存储是放在一块,初始化全转载 2012-09-15 10:19:29 · 4954 阅读 · 0 评论 -
while(cin>>val)的原理浅析
今天看书的时候看到代码while(cin>>val),忽然就在想这样写的合法性是如何判定的。我们都知道cin是一个流对象,而>>运算符返回左边的流对象,也就是说cin>>val返回cin,于是while(cin>>val)就变成了while(cin),问题就变成了一个流对象在判断语句中的合法性。 不管是while(cin)还是if(cin),都是合法的,为什么呢?我们自己定义一个类原创 2013-06-15 22:19:04 · 4161 阅读 · 1 评论 -
C++中使用hiredis
hiredis是redis数据库的C接口,目前只能在linux下使用,几个基本的函数就可以操作redis数据库了。1、redisContext* redisConnect(const char *ip, int port) 说明:该函数用来连接redis数据库,参数为数据库的ip地址和端口,一般redis数据库的端口为6379。 类似的提转载 2014-03-21 20:44:53 · 23125 阅读 · 1 评论