C/C++基础
业务架构实验室
在程序的世界里,你永远不会成为最懂的那个人,因为你总是能从不同的人身上学习到你所不知道的知识
展开
-
C++中const成员变量的初始化
C++中对于const关键字修饰的成员变量规定初始化原创 2014-11-25 15:22:35 · 929 阅读 · 0 评论 -
C++学习之变量和基本类型
C++中变量的定义:变量是一个具名的,可供程序操作的存储空间。对C++ 程序员而言,变量和对象可以互换使用。C++数据类型共分为基本内置类型和复合类型,其中基本内置类型包括基本算数类型和空类型(void),基本算数类型包括浮点数,整数,布尔值等,复合类型包括引用和指针类型,其中复合类型的声名结构如下:基本类型 类型修饰符 标识符(如 int *p)为了突出基本类型是int *符号原创 2015-04-01 13:15:04 · 797 阅读 · 0 评论 -
C++学习路线
建议新人学C++必须从创始人、著名C++大牛的著作入手,有条件的最好是选择近年的带有基础知识的著作,比如C++之父近年来的《C++程序设计原理与实践》,不要过分迷恋经典书籍,因为“兼容”一直都是C++哲学重要的根基,没必要担心不把年代久远的书看了就少了什么。打基础阶段把C++中关于泛型编程的模板这些放了,日后有兴趣再专门拜读关于此的初中高级著作来学习。基础学习之后,就该拜读编码规范、惯用实现方式等转载 2015-04-01 14:16:36 · 2128 阅读 · 0 评论 -
C++的一大误区-深入理解直接初始化与复制初始化的区别
原文出处: C++的一大误区——深入解释直接初始化与复制初始化的区别 不久前,在博客上发表了一篇文章——提高程序运行效率的10个简单方法,对于其中最后一点,多使用直接初始化,有很多读者向我提出了疑问,并写了一些测试程序,来说明直接初始化与复制初始化是同一件事。让我了解到大家对于直接初始化与复制初始化的区别的确是不太清楚,无可否认,那篇文章的例子用得的确不转载 2015-04-03 18:01:03 · 526 阅读 · 0 评论 -
C++学习之构造函数、拷贝构造函数
引申问题一:拷贝构造函数中参数是否加const对拷贝构造函数的影响。网上大多数人对于这个问题的解释只能达到"当你不想对参数进行修改时,就需要加上const关键字"的程度,但是并没有仔细区分这两种情况到底有什么区别。以下面的程序为例:Dog.h#ifndef __test_header__Dog__#define __test_header__Dog__#include cl原创 2015-04-03 17:04:19 · 779 阅读 · 0 评论 -
GCC Warning ISO C++11 Does not allow conversion from literal string to char*
当声名一个Dog类的构造函数为如下时:Dog(char * name);然后在使用时初始化一个DogDog dog("Tom");就可能会提示C++11 Does not allow conversion from literal string to char *我猜测这是因为字面值"Tom"应该是不可被修改的,所以直接将它复制给char *类型的name是不安全的做法,所以这原创 2015-04-04 11:14:31 · 8675 阅读 · 0 评论 -
C++学习之vector
vector容器几个疑惑点:①初始化:Dog.h#ifndef __test_header__Dog__#define __test_header__Dog__#include #include class Dog{public: Dog(); Dog(const char name[]); bool operator==(const Dog &d原创 2015-04-04 21:59:57 · 638 阅读 · 0 评论 -
C++学习之数组
Dog.h#ifndef __test_header__Dog__#define __test_header__Dog__#include #include class Dog{public: Dog(); Dog(const char name[]); const Dog& operator=(const Dog &dog) const; boo原创 2015-04-05 14:55:59 · 713 阅读 · 0 评论 -
C++学习之数组名a与&a的区别
在C++中定义一个数组:int a[5]={1,2,3,4,5}那么a到底代表什么含义呢?首先想到的是a代表的是数组的首元素地址。那么如果问你a的类型是什么呢?估计很多人就不太确定了,看下面程序,让编译器告诉我们a是什么类型的数据:main.cpp如下:从图片中的错误提示可以看出:a的类型是int [5]类型。那么直接将a赋值给一个int (*)[5]类型的指针类型是不行的原创 2015-04-06 17:58:48 · 2843 阅读 · 0 评论 -
C++编程规范之初始化
今天被一个bug坑了一晚上调试信息也很难定位bug在哪里最后发现是因为类中的指针成员变量初始化值是一个未知地址,而不是nullptr所以以后写c++程序一定要养成良好的习惯哎再忘记初始化就剁手,草原创 2015-05-13 00:12:00 · 597 阅读 · 0 评论 -
C++学习之重复定义的错误
源文件如下:1.cpp:void show(){cout};2.cpp:#include "1.cpp"int main() { cout}编译通过,链接错误,提示duplicate symbol Z6showV这是因为第二个cpp文件直接将第一个cpp文件包含进来,而不是头文件,这样就会使得show函数定义两遍,第一遍在1.cpp中定义原创 2015-04-01 11:46:14 · 739 阅读 · 0 评论 -
C++学习之类型转换带来的问题
如下程序:int main(int argc, const char * argv[]) { // insert code here... unsigned int a = 1; int b = -1; if(a<b){ cout<<"a<b"<<endl; }else coutb"<<endl; return 0;}输出结原创 2015-04-02 14:29:26 · 553 阅读 · 0 评论 -
C++学习之namespace的用法
fish.cpp&fish.h#ifndef __test_header__fish__#define __test_header__fish__#include namespace ns_fish { void fish_show();}#endif /* defined(__test_header__fish__) */#include #include "fis原创 2015-04-02 10:38:34 · 3825 阅读 · 0 评论 -
C++编译错误(1):缺少;(在using前)
有时候C++编译时会遇到缺少;(在using前)这样的错误提示这种错误往往是因为前一句include语句引起的,因为include的作用是把include包含的内容替换到当前的文件中,这种替换相当于复制粘贴的效果,所以当提示在using namespace std;这条语句前少了一个分号的话,就是说你include的进来的文件末尾可能需要一个分号而你没有加,这时应该仔细检查includ原创 2014-11-27 13:36:35 · 3496 阅读 · 0 评论 -
C++中拷贝构造函数
Dog.h文件#include #include using namespace std;#ifndef DOG_H#define DOG_Hclass Dog {private: string name; int age; static int count;public: void bark() { cout << Dog::name << " age:" <<原创 2014-11-24 11:05:06 · 837 阅读 · 0 评论 -
C++ stdafx.h
预编译头文件(扩展名为.PCH)是把一个工程中较稳定的代码预先编译好放在一 个中间形式的文件中(PCH文件),编译器可以更加快捷的使用这个文件,减少编译时间。预先编译好的代码可以是任何的C/C++代码。 预编译头文件的目的就是提高编译速度。编译器以文件为单位编译,如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西。在比较大的C/C++程序中,这些头文件中所包括的东西转载 2014-12-03 21:56:46 · 832 阅读 · 0 评论 -
C++中预编译头/yc /yu的区别
创建了一个空的工程,不停的添加新项,添加新类,数量越来越多,发现,每次修改一处,都会把所有的重新编译,速度实在太慢,原来是没有使用预编译头。我把别的工程的stdafx.h和stdafx.cpp拷过来,工程属性改为"使用预编译头(/Yu)",编译报错,改为“创建预编译头(/Yc)”,还是报错。百思不得其解,只好创建一个hellow world,发现除了stdafx.cpp文件是“创建预编译头转载 2014-12-03 23:33:13 · 3191 阅读 · 0 评论 -
C++头文件的工作原理
一、C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对转载 2014-12-03 17:07:38 · 2158 阅读 · 0 评论 -
error c2129:静态函数已声明但未定义
由于实验的需要,要改动OpenCV中混合高斯模型的代码,由于担心重新编译OpenCV项目麻烦,于是自己建立新的源文件,利用它里面的一些源代码,OpenCV混合高斯模型主要在。。。\src\cvaux\vs\bgfg_estimation.cpp以及。。。\src\cvaux\cvbgfg_gaussmix.cpp中实现。将其代码拷贝过来,修改以后编译出现error c2129:静态函数已声明但未定转载 2014-12-03 20:20:54 · 6667 阅读 · 0 评论 -
C++零食:使用Unicode版的预定义宏__FUNCTION__
在C++中支持一种预定义宏。比如:__FILE__: 就是当前源代码文件名__LINE__: 就是当前源代码的行号这些宏可以在printf等语句中直接作为字符串使用,调试的时候很方便。如下代码所示:int _tmain(int argc, _TCHAR* argv[]){ printf("Line:%d", __LINE__); return转载 2014-12-05 23:16:27 · 965 阅读 · 0 评论 -
Cocos2dx内存管理机制
使用过 Cocos2d-x 都知道,其中有一套自己实现的内存管理机制,不同于一般 C++ 的编写常规,而在使用前,了解其原理是有必要的,网上已经有很多对内部实现详细解说的文章。而对于使用者而言,并不需要对其内部有很深的了解,注重其“机制”,而非内部实现,在这里只是简单的聊一聊它的管理方式以及使用,固为浅说。 无用对象 与 管理对象Cocos2d-x 将会在下一帧自动清理无用转载 2014-12-05 20:32:08 · 669 阅读 · 0 评论 -
C\C++ 中 va_start va_arg va_end 的使用和原理
◎用法: func( Type para1, Type para2, Type para3, ... ) { /****** Step 1 ******/ va_list ap; va_start( ap, para3 ); //一定要“...”之前的那个参数/****** Step 2 ******/ //此时ap指向第一个可变参数 //调用va_arg取得里转载 2014-12-07 21:38:47 · 4307 阅读 · 1 评论 -
C++学习之成员函数指针
C++中有函数指针,申明方式如下:void(*p)(float) 其中p就是一个函数指针,如果我们定义一个函数void fun(float) 那么我们可以p = fun 或者p = &fun来给p赋值于此同时还有一个概念叫做成员函数指针,这个指针和函数指针类似,所不同的是它是一个指向类的成员函数的指针,其声名方式如下:void (class_name::*p)(float) 这就代原创 2015-05-07 20:07:20 · 750 阅读 · 0 评论