预编译头文件pch

摘要: 1、 预编译头文件作用:提高编译效率。预编译头文件(扩展名为.PCH),是为了提高编译效率而使用的一种方法,把一个工程中较稳定的代码预先编译好放在一个文件(.PCH)里.避免每次编译时去重新编译没有修改的所有文件,这些预先编译好的代码可以是任何的C/C++代码。为什么需要预编译头文件?一言以蔽之:提高编译速度.一般地,编译器以文件为单位编译,如果修改了工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西(例如Macro宏,Preprocessor预处理),而VC程序中,这些头文件中所包括的东西往往是非常大的,编译之将占很长的时间.但它们又不常被修改,是较稳定的,为单独的一个小文件而重 阅读全文
posted @ 2014-03-10 21:57 江在路上2 阅读(3810) 评论(0) 推荐(0) 编辑

extern_c

摘要: (1) 使用extern和包含头文件来引用函数有什么区别呢?extern的引用方式比包含头文件要简洁得多!extern的使用方法是直截了当的,想引用哪个函数就用extern声明哪个函数。这大概是KISS原则的一种体现吧!这样做的一个明显的好处是,会加速程序的编译(确切的说是预处理)的过程,节省时间。在大型C程序编译过程中,这种差异是非常明显的。(2) 被extern "C"修饰的变量和函数是按照C语言方式编译和连接的;未加extern“C”声明时的编译方式。首先看看C++中对类似C的函数是怎样编译的。作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被 阅读全文
posted @ 2014-03-10 21:55 江在路上2 阅读(608) 评论(0) 推荐(0) 编辑

restrict关键字

摘要: 值得注意的是,一旦你决定使用restrict来修饰指针,你必须得保证它们之间不会互相重叠,编译器不会替你检查。关键字restrict有两个读者。一个是编译器,它告诉编译器可以自由地做一些有关优化的假定。另一个读者是用户,他告诉用户仅使用满足restrict要求的参数。一般,编译器无法检查您是否遵循了这一限制,如果您蔑视它也就是在让自己冒险。使用restrict的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码In theC programming language, as of theC99 standard,restrictis akeywordthat can be used 阅读全文
posted @ 2014-03-10 21:53 江在路上2 阅读(203) 评论(0) 推荐(0) 编辑

运算符优先级

摘要: 又倒腾一遍优先级的原因是遇到了下面的问题:假设data是一个struct,并含有一个int型的a成员,则 (double)data.a有没有语法错误呢?首先()和.具有相同的优先级,并且是从左向右结合的。所有data应该先转换为double型的数据。但是(double)data.a是完全正确的。从上面的图中可以看出,当()作为强制转换运算符时,其优先级是低于.的。 阅读全文
posted @ 2014-02-24 19:55 江在路上2 阅读(145) 评论(0) 推荐(0) 编辑

命名空间

摘要: 1、main.cppnamespace ff{ class A {}; class B {};}int main(void){ A a; // error B b; // error return 0;}2、main.cppnamespace ff{ class A {}; class B {};}using namespace ff; // 将命名空间ff内的信息全部导入int main(void){ A a; // ok B b; // ok return 0;}3、main.cppnamespa... 阅读全文
posted @ 2013-09-22 10:17 江在路上2 阅读(134) 评论(0) 推荐(0) 编辑

腾讯2013实习生招聘笔试题目(2)

摘要: 2、 32 位机上根据下面的代码,问哪些说法是正确的? signed char a = 0xe0; unsigned int b = a; unsigned char c = a; A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D. 上面都不对A:分析 a>0, 首先进类型提升,将signed char 提升为signed int,值为0xffffffe0,是负数,所以a>0错误。分析c>0,首先进类型提升,将unsigned char 提升为signed int,值为0x000000 阅读全文
posted @ 2013-09-20 14:54 江在路上2 阅读(249) 评论(0) 推荐(0) 编辑

typedef和define的作用域

摘要: typedef:如果放在所有函数之外,它的作用域就是从它定义开始直到文件尾;如果放在某个函数内,定义域就是从定义开始直到该函数结尾;#define:不管是在某个函数内,还是在所有函数之外,作用域都是从定义开始直到整个文件结尾。如:typedef …//此处开始到文件结尾#define …//此处开始到文件结尾int negate(int num){… typedef …//此处开始到该函数结束。注意,该函数内,此定义前,也不能用 #define …//此处开始到文件结尾…}typedef …//此处开始到文件结尾#define …//此处开始到文件结尾void show... 阅读全文
posted @ 2013-09-20 14:40 江在路上2 阅读(715) 评论(0) 推荐(0) 编辑

腾讯2013实习生招聘笔试题目(1)

摘要: 1、下面错误的有:int i; char a[10]; string f(); string g(string &str); A. if(!!i){f();} B. g(f()); C. a=a+1; D. g("abc");A和C比较容易判断:A真确,C错误。对于B和D,情况要复杂一些:(MyString为自定义string)(1) 函数参数为非MyString引用的情况void g(const MyString str) // 或者没有const{}int main(void){ MyString a; g(a); cout using namespace .. 阅读全文
posted @ 2013-09-20 12:39 江在路上2 阅读(272) 评论(0) 推荐(0) 编辑

自定义string

摘要: 自定义string:MyString#include#includeusing namespace std;class MyString{public: MyString() { // 默认构造函数将MyString初始化为空字符串"",而不是NULL m_pData = new char[1]; if(m_pData == NULL) { cout << "allocation error" << endl; exit(1); } m_pData[0] ... 阅读全文
posted @ 2013-09-19 23:55 江在路上2 阅读(160) 评论(0) 推荐(0) 编辑

高质量程序设计指南c++/c语言(36)--虚继承

摘要: 先看虚虚继承的一个例子:ios是抽象基类,ostream和istream都虚继承自ios,而iostream又继承自ostream和istream,这样,ios在iostream中只有一份实例。#include<iostream>using namespace std;class Root{public: Root() { cout << "Root()" << endl; }};class Level11: public virtual Root{public: Level11() { cout << "Level 阅读全文
posted @ 2013-05-14 15:08 江在路上2 阅读(194) 评论(0) 推荐(0) 编辑