初识C++
- 1.命名空间
- 2.C++输入输出
- 3.缺省参数
- 4.函数重载 extern “C”
- 5.引用
- 6.内联函数
- 7.auto关键字
- 8.基于范围的的for循环
- 9.nullptr
浅析
1 命名空间
- 命名空间 : 避免命名冲突
namespace Name{
int a;
int b;
int sub(int a, int b){
return a + b;
}
}
- 既可以命名变量也可以命名函数
- 可以进行嵌套
namespace Name{
namespace Name2{
}
}
- 可以存在相同名字的命名空间,编译器最后会合成同一个命名空间
- 如何使用
- using Name::成员 引入单个成员 或者 using namespace Name 把整个命名空间的成员引入
using Name::a;
using namespace Name;
2 C++输入输出
- 输出 cout << “hello world” << endl;
- 输入 cin >> a ;
- 注意 : 必须包含头文件 < iostream >
3 缺省参数
- 在声明或定义函数时,给参数设定一个默认值,在调用该函数时,如果没有传参数时,使用默认值
int fun(int a = 10){
return a;
}
int main(){
fun(10);
fun();//在没有传参的时候,使用默认值
return 0;
}
- 缺省参数分为全缺省和半缺省
int fun(int a = 10, int b = 20);
int fun(int a, int b = 10, int c = 20);
- 缺省参数要从右往左一次给出
- 缺省值之能在声明和定义中出现一次,不然编译器不知道使用哪一个缺省值
4 函数重载
- C++允许在同一作用域中声明几个功能类似的同名函数,但是他们的参数类型或个数或顺序必须不同,这样才能构成重载.(注 : 和函数返回值的类型无关)
//构成重载函数
int fun(int a, short b);
int fun(short a, int b);
//不构成重载函数
int fun(int a, short b);
void fun(short a, int b);
- C++为什么能构成函数重载而C不能?
- 在编译阶段, 编译器会把函数名, 变量名重新改编成全局唯一的名称,这个称作 name mangling, C语音的名字修饰是直接在名字前面直接加一个下划线,而C++编译器会按照函数的名字及参数类型进行修饰, 保证每个函数在底层的唯一性
- 如果想要按照c语言的方式进行编译, 只需在函数名前加 extern “C”
5 引用
- 引用是给一个变量取了一个别名, 编译器不会给引用开辟空间
- 类型& 引用变量名(对象名) = 引用实体;
int a = 10;
int& b = a;//b 为 a 的引用
- 引用在定义的时候必须初始化, 且不能再引用其他实体
int a = 10;
int& b;//错误
int c = 10;
int& d = c;
d = a;//不能再引用其他实体
- 常引用
const int& a = 10;
const int b = 10;
const int& c = b;
- 引用在底层上是使用的指针,但是和指针的用法有区别
- sizeof引用,得到的是实体的大小, sizeof指针, 是指针的大小
- 没有多级引用,但是有多级指针
- 指针需要显式的解引用, 引用不需要
6 内联函数
- 在函数名前加 inline 关键字
- 在编译时, 会在调用内联函数的地方展开,没有函数压栈的开销,提升程序的运行效率
inline int fun(){
int a = 10;
int b = 10;
return a + b;
}
- inline 对编译器只是一个建议, 具体展开与否,如果函数体内有循环/递归等,编译器会忽略内联.
- inline 函数定义和声明不能分离, 否则会导致链接错误
7 auto
- 类型占位符, 在编译阶段auto会替换成变量的实际类型
auto a = 10;
auto f = 10.0;
auto p = &a;
auto* p = &a;//注意 在声明指针类型时,用 auto 和 auto* 没区别
auto& c = a;//声明引用时必须要加&
- auto 不能用来作为函数的参数, 不能声明数组
8 基于范围的for循环
- 对于一个有范围的集合来说, 迭代的范围是确定的
- for(用于迭代的变量 : 迭代的范围)
int array[] = { 1, 2, 3, 4, 5 };
for(auto& e : array)
e *= 2;
for(auto e : array)
cout << e << " ";
9 nullptr
- C++关键字
- 指针空值 ,其类型为 nullptr_t,仅仅可以被隐式转换为指针类型