在计算机科学中, 调用约定是一种定义子过程从调用处接受参数以及返回结果的方法的约定。不同调用约定的区别在于: 参数和返回值放置的位置(在寄存器中;在调用栈中;两者混合) 参数传递的顺序(或者单个参数不同部分的顺序) 调用前设置和调用后清理的工作,在调用者和被调用者之间如何分配 被调用者可以直接使用哪一个寄存器有时也包括在内。(否则的话被当成ABI的细节) 哪一个寄存器被当作volatile的或者非volatile的,并且如果是volatile的,不需要被调用者恢复 _cdcel是C/C++默认的函数调用约定 函数实…

2018年1月10日 0条评论 3176点热度 0人点赞 icebmji 阅读全文

[toc] 转载地址:http://www.runoob.com/cplusplus/cpp-storage-classes.html C++ 存储类 存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类: auto register static extern mutable thread_local (C++11) 从 C++ 11 开始,auto 关键字不再是 C++ 存储类说明符,且 register 关键字被弃用。 au…

2018年1月4日 0条评论 2813点热度 0人点赞 icebmji 阅读全文

重载 在同一个作用域内 函数名相同 参数不同,可以是数量或类型 其他因素:  virtual、static不影响重载 返回值类型不同不影响重载 部分函数类型限定符,如写在成员函数参数列表后的const,影响重载 示例: class A { public: void f(int) {} void f(float) {} void f(int) const {} void f(int, int) {} //int f(int){} //virtual void f(int) {} }; 覆盖 不在同一作用域,即分别位于…

2018年1月3日 0条评论 3012点热度 0人点赞 icebmji 阅读全文

预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。 预处理一般过程: 宏定义处理 #define 条件编译 #if 头文件包含 #include 其它,如:#pragma  #line #error等 在编译器加参数"/P",预处理将会将宏替换后的源代码输出到一个".i"文件中,不会在生成".obj"

2018年1月3日 0条评论 2104点热度 0人点赞 icebmji 阅读全文

C++new操作符带不带括号区别 https://www.zhihu.com/question/35843839 类的空指针的成员函数调用 #include using namespace std; class A{ public: void test() { printf("test A"); } }; int main(){ A* pA = NULL; pA->test(); return 0; } 上面的程序是合法的,C++在编译期间,就找到了pA的函数,发现test非虚函数,并且在其中没有对this指…

2017年12月8日 0条评论 3019点热度 0人点赞 icebmji 阅读全文

第一章-开始 默认情况下cerr的数据不缓冲,直接输出,所以也无法重定向(p23) clog和cout的数据是会缓冲的(p23) 第二章-变量和基本类型 C++基本数据类型有:算数类型和空类型(p30) 长度问题:书上写的都是为最小尺寸,一般VC的int为32位,long也为32位(p30) 一个表达式中既有无符号数又有有符号数,通常将有符合数转化为无符号数(p34) 以0(零)开头的整数代表8进制,0x开头的整数代表16进制(p35) 字符串字面值的实际长度通常比它的内容多1,如果两个字符串字面值位置紧邻,且仅有…

2017年11月24日 0条评论 8395点热度 0人点赞 icebmji 阅读全文

const的作用是使对象至少在运行期间是常量 首先const并非只有两层,如:const int *const*const*const p=nullptr;其实也无需多的抠概念只要知道哪个const修饰的是哪个对象,它的作用是什么,自然就知道很清楚了 1. 永远从右往左读一个变量声明。 2. const永远修饰const出现地点左边的声明类型。 3. 如果左边没有声明类型,就修饰右边。 举例:const int * const p=nullptr; 红const修饰int * 即p是常量,蓝const 修饰int …

2017年10月7日 0条评论 2500点热度 0人点赞 icebmji 阅读全文

函数与const const在函数名前是修饰返回值,表示返回值为const类型,不可更改。 在函数后修饰函数,表示函数为常成员函数,不能对类的成员变量进行修改。 并且当声明一个类的const对象时,只能调用其类的const方法。 const在后的方法能够重载。 virtual 友元函数、构造函数、static静态函数,不能用virtual关键字修饰。 普通成员函数 和析构函数 可以用virtual关键字修饰。 virtual修饰析构函数的话,防止动态绑定时无法对派生类对象进行有效释放。即当有向上转型时,调用父类的析…

2017年7月23日 0条评论 3885点热度 0人点赞 icebmji 阅读全文