1:有如下几种原因: (1)inline定义的类的内联函数,函数的代码被放在符号表中,在使用时直接进行替换(像宏一样展开),没有了调用的开销,效率也很高. (2)类的内联函数也是一个真正的函数.编译器在调用一个内联函数时,首先会检查它的参数的类型,保证调用正确:然后进行一系列的相关检查,就像对待任何一个真正的函数一样.这样就消除了它的隐患和局限性. (3)inline可以作为某个类的成员函数,当然就可以在其中使用所在类的保护成员及私有成员.…
void main() { "; cout<< cout<< "; cout<< cout<<strlen(ss2)<<endl;//10注意sizeof 和 strlen区别 strlen 检测到\0后停止 cout<< cout<<sizeof(float)<<endl;//4 cout<< cout<< cout<< cout<< cou…
const: 1 定义变量 ,如下写法都可以: TYPE const ValueName = value;                  const TYPE ValueName = value; 2 当作为全局变量并且在他文件也想使用时:(默认const具有局部性) 1.CPP  :extern const TYPE ValueName = value;定义 2.CPP:  extern const  TYPE ValueName; 外部声明 上面两个const 和TYPE可以颠倒. 3…
02.尽量以const,enum,inline代替#define 原因:编译前的预处理会替换宏,所以调试的时候找不到错误 1.const 尽量用const替代常量宏定义 两种特殊情况: (1).常量指针 通常定义为const char * const cstr="hello world"; 即要把指针本身定义为const,而不仅仅是指针指向的值,通常用string替代char*-based: const string str("hello world"); (2).…
1> 以const替换#define • 比如用const double Ratio = 1.653替换#define RATIO 1.653 因为宏定义在预处理阶段就会被替换成其所指代的内容,然后才是对替换后的内容进行编译,因此编译器永远不能发现宏的存在.此时如果宏变量RATIO出现问题,那么编译器只会报出是1.653出现问题,是不是相当莫名其妙?究其原因就是所使用的宏变量压根没进入到符号表中,编译器看不到. • 如何定义类内常量,就是对该类而言只有一份的那种变量?当然我们会想到static,…
条款02: 尽量以 const, enum, inline 替换 #define 这个条款或许可以改为“宁可以编译器替换预处理器”. 编译过程: .c文件--预处理-->.i文件--编译-->.o文件--链接-->bin文件 如果你做出这样的事: #define ASPECT_PATIO 1.653 记号名称 ASPECT_PATIO 从未被编译器看见:也许在编译器开始处理源代码之前它就被预处理器移走了.于是记号名称 ASPECT_PATIO 有可能没有进入符号表(symbol tabl…
Effective C++ Chapter 1. 让自己习惯C++(Accustoming Yourself to C++) Item 2. 尽量以 const, enum, inline 替换 #define (prefer consts, enums and inlines to #define) 这个条款或许可以改为"宁可以编译器替换预处理器"比较好,因为或许 #define 不被视为语言的一部分. 对于 #define ASPECT_RATIO 1.653 记号名称 ASPEC…
1.考虑为什么? 首先,#define不是语言的一部分,而是预编译过程.也就是在编译器编译之前,进行文本替换.考虑#define Pi 3.1425:在编译之前,Pi都会被文本替换为3.1415,因此编译器看不到Pi这个标识.这会增加调试难度.同时文本替换导致目标码中出现多份3.1415. 2.尽量不使用#define,就要使用替代办法. 3.对于#define Pi 3.1415这样形式,使用const替换const double Pi = 3011415;以const替换#define,有两…
转自:forbids in-class initialization of non-const static member不能在类内初始化非const static成员 今天写程序,出现一个新错误,好吧,感觉每次编程都能遇到新问题,我期待久病成医的那一天,哈哈.事故代码如下: class Employee { public: Employee() {myid = id++;}; Employee(const std::string &n) {myid = id++;name = n;}; int…
const作用: 1.定义常量,可以保护被修饰的东西,防止意外的修改,增强程序的健壮性. const int Max = 100; void f(const int i) { i=10;//error! }      //如果在函数体内修改了i,编译器就会报错 ; int b = a; //it's right a = ; // it's wrong, 2.便于进行类型检查 const常量有数据类型,而宏常量没有数据类型.编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查…