C++复习-命名空间/iostream/缺省参数

C++复习-命名空间/iostream/缺省参数

前言

打算认真复习一下C++语言,将自己复习的笔记整理出来。
本篇文章主要介绍的是命名空间、iostream和缺省参数,欢迎大家交流分享。

原文地址:sinblag

命名空间

Bjarne Stroustrup解决了大量CPP的问题。

比如命名冲突,我们自己写的代码可以和C的标准库中的命名冲突,导致报错。所以,
C++引入了命名空间namesapce去解决命名冲突的问题。

在C语言中,有局部优先原则,::可以访问全局变量:

int a = 10

int main(){
    int a = 5;
    cout << a << endl;
    cout << ::a << endl;
    return 0;
}

这里输出的值是5和10。

::是指定命名空间,这里的::a实质上就是指定全局命名空间。

编译默认的查找,首先是查找当前的局部变量,在找不到之后会去全局域查找,不会去命名空间中查找。

namespace sin
{
    int hejiguang;
}

int main(){
    cout << hejiguang;
    return 0;
}

这里会报错,而加入指定域之后sin::hejiguang,可以查找到在域sin中的内容。

命名空间中可以定义变量,也可以定义函数和类型。

命名空间可以嵌套,但不是很常用,例如:

struct sin::fz::Node pnode;

使用命名空间

不同的文件中可以定义同名的命名空间,多个文件中的命名空间可以合并。这样可以解决当代码量过大导致的命名空间过多的问题。

命名空间使用using namespace可以展开,这样在文件中就可以不再指定命名空间。常见的是:

using namespace std;

当展开命名空间之后,会先在局部找,之后在全局找,最后在命名空间包含的部分寻找。

多个命名空间同时展开,如果其中有包含同名命名空间,还是可能导致命名冲突的问题。所以命名空间不要随便展开。

如何在命名空间中有变量名需要经常使用,也可以不展开整个命名空间,只展开某一个:

using sin::hejiguang;

这样只展开了sin中的hejiguang这一个变量名,而没有将sin中的变量全部展开。

关于域的概念,有全局域,局部域,命名空间域,类域等等。作用都是帮助C++查找变量。

iostream

C++有一套新的输入输出流,需要包含的头文件时iostream。

#include<iostream>

输出一个内容:

double i = 1.1;
cout << i << endl;

这里的cout是将后面的内容打印在屏幕中,printf需要自己指定类型。相比之下cout更加方便好用。

这里的cout在官方库命名空间std中。

所以一般程序开头出现的

using namespace std;

就是在包含std命名空间。也可以不全部展开,只展开cout

using std::cout;

而c++中的cin是输入函数:

std::cin >> i;

缺省参数

CPP相较于C,可以在函数中添加缺省参数:

void Func(int a = 1){
    cout << a << endl;
}

这样在调用Func不包含参数的时候,1就是函数的默认参数。

缺省参数不可以跳着传,只有最后面可以缺省,只能从右往左缺省。

func1(int a = 1,int b = 2); //正确
func1(int a = 1,int b); //错误
func1(int a,int b = 2); //正确

缺省有全缺省和半缺省,就是全部由默认值和部分有默认值的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值