初识C++

初识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,仅仅可以被隐式转换为指针类型
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值