- #define 与 const 的区别
1、起作用阶段
#define 是在预处理阶段,可以用 g++ -E hello.cpp -o hello.i ,去看预编译后的文件,#define 会将源文件中,用define定义的变量全部替换。
const 是在编译链接时候起作用。
2、是否安全
#define 不安去,不会做类型检查,只做文本的简单替换。
const 在定义的时候,就是类型加常量名,会做类型检查,
3、占用内存与开销
#define 在预编译后,将用到地方都展开,多个地方用到的话,会展开多次,占用代码段内存。
const 变量会在常量区,只有一份。之后在用到的地方,编译器都直接给的是地址,省了内存空间。
4、特有功能
#define 特有功能,用来防止文件重复引用。也可以定义函数等。
#ifndef XX_H
#define XX_H
头文件的代码段
#endif
- #define 与 inline 的区别
1、起作用阶段
define 是在预处理阶段
inline 是在编译链接 阶段,inline 是否起作用由编译器决定。
2、是否安全
inline 函数有类型检查,相比较 宏 是更安全的
3、inline的用法
inline 用法随着C++的修订,越来越多。但对于普通常用的修饰函数,有几点注意
inline 起不起作用由编译器决定,只是起个建议作用,写在函数实现上,写在声明处没有作用。inline定义的全局函数,被另外的文件调用的话,相当于普通的全局函数,不会在调用出被展开。
- typedef 与 using
这两个关键字都是给数据变量起别名,define 也可以给起别名,但是原理就是字符串替换。
typedef 和 using 的区别在于使用上的区别。
- typename
泛型编程时候的关键量,在template 后面,用处和class 一样,都是告诉编译器,这是一个类型。
在泛型类中,在声明是类型的时候,也需要在前面加上关键字 typename 告诉编译器这是类型,不是变量。
1、怎么防止头文件多次引用
一般有两种方法,一种是语言层面,一种是编译器曾名
语言层面:
#ifndef XX_H
#define XX_H
头文件内容
#endif
编译器层面
#pragma once
2、extern "C" 的用法
extern "c" 是C++特有的关键字,C不能用。目的是为了了让C 兼容 C++,让C++调用C的代码。
https://blog.csdn.net/sinat_36817189/article/details/110423243
https://blog.csdn.net/qq_24282081/article/details/87530239