C++命名空间和缺省参数介绍

一、命名空间

为什么引入命名空间

在C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

    int a = 10;
    
    int main(void)
    {
        int a = 10;
        return 0;
    }

这里一个a是全局变量,一个a是局部变量。可以编译通过。

	int a = 10;
	int a = 20;

	int main(void)
	{
		int a = 10;
		return 0;
	}

当有两个全局变量a时,命名冲突了,编译不过。

举例说明,假如1班和2班都有名字叫张三的同学,当一班和二班站在一起时,老师叫张三就会出现歧义,不知道叫的是一班的还是二班的。但是如果老师叫一班的张三或二班的张三,就不会出现歧义和错误。这里的一班和二班就相当于命名空间。

命名空间定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

    namespace bc    //bc为命名空间的名字
    {
        //命名空间的成员
        int a = 100;    
        int ADD(int a, int b)
        {
            return a + b;
        }
    }

命名空间中的内容,可以是类、变量、函数、模板和其它命名空间。

命名空间可以嵌套

    namespace FPX
    {
        int a = 5;
        namespace doinb
        {
            int b = 5;
            void Champion()
            {
                cout << "FPX2021WIN" << endl;         
            }
        }
    }

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
同时也意味着在名字相同的命名空间中的命名是不能冲突的。

使用命名空间

有以下命名空间:

  namespace bc
    {
        int m = 10;
        int n = 20;
    
        int Add(int a, int b)
        {
            return a + b;
        }
    
        int Max(int a, int b)
        {
            return a > b ? a : b;
        }
    }

1.使用using声明将命名空间全部展开到全局。

    using namespace bc;

这样命名空间中的内容就可以像全局一样直接使用。

    int a = 10;
    int b = 20;
    cout << Add(a, b) << endl;
    cout << Max(a, b) << endl;

这种方法的优点是使用起来非常方便,缺点是把自己的定义都暴露出去了,导致命名污染。

2.访问命名空间的内容时,指定命名空间。

    int a = 10;
    int b = 20;
    cout << bc::Add(a, b) << endl;
    cout << bc::Max(a, b) << endl;

::为作用域运算符,前缀bc::指出函数Add和Max是定义在名为bc的命名空间中的。通过作用域运算符(::)来指出我们想使用定义在命名空间bc中的名字Add和Max。
这种方法的优点是不存在命名污染,缺点是用起来太麻烦,每个都要去指定命名空间。

3.可以把常用的展开

比如Add函数是常用的:

    using bc::Add;

以后使用Add函数时就不需要指定命名空间。
这种方法不会造成大面积的命名污染,把常用的展开,使用时也很方便。
位于头文件的代码一般来说不应该使用using声明。因为头文件的内容会拷贝到所有引用它的文件中,如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明。对于某些程序来说,由于不经意间包含了一些名字,反而可能产生名字冲突。

标准命名空间

C++ 引入了命名空间的概念,计划重新编写库,将类、函数、宏等都统一纳入一个命名空间,这个命名空间的名字就是std。std 是 standard 的缩写,意思是“标准命名空间”。

二、缺省参数

缺省参数概念

缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。

 void TestFunc(int a = 0)    //参数缺省值
    {
        cout << a << endl;
    }
    
    int main(void)
    {
        TestFunc();        //没有传参数,使用参数的默认值
        TestFunc(10);    //传参数时,使用指定的参数
        return 0;
    }

三、缺省参数分类

全缺省参数

所有的参数都给出缺省值:

    void TestFunc(int a = 10, int b = 20, int c = 30)
    {
        cout << "a = " << a << endl;
        cout << "b = " << b << endl;
        cout << "c = " << c << endl;
    }

半缺省参数

部分参数给出缺省值:

    void TestFunc(int a, int b = 10, int c = 20)
    {
        cout << "a = " << a << endl;
        cout << "b = " << b << endl;
        cout << "c = " << c << endl;
    }

需要注意的是:

半缺省参数必须从右往左依次来给出,不能间隔着给。
缺省参数不能在函数声明和定义中同时出现。
缺省值必须是常量或者全局变量。

到此这篇关于C++命名空间和缺省参数介绍的文章就介绍到这了,更多相关C++命名空间和缺省参数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++的缺省参数你了解嘛

    目录 一.缺省参数概念 有什么用 二.缺省参数分类 全缺省参数 半缺省参数 总结 一.缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个默认值.在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参 #include<iostream> using namespace std; void TestFunc(int a = 0)//参数缺省值 { cout << a << endl; } int main() { TestFunc();//没有指定实

  • C++ namespace命名空间解析

    目录 命名空间 namespace 命名空间的定义 1. 函数定义在命名空间里 2.对全局变量使用命名空间 3.命名空间的嵌套 4.using命名空间 5.命名空间里的结构体 命名空间 namespace #include<iostream> int rand = 0; int main() { printf("%d", rand); return 0; } 上述代码一定会出现以下情况: 原因: 自己定义的rand变量为某一库函数里面已经声明过的函数,意思就是你自己定义的东

  • C++的命名空间详解

    目录 C++ | C++命名空间 C++命名空间 定义命名空间 实例1: using 指令 实例2: 实例3: 不连续的命名空间 嵌套的命名空间 实例4: 实例5: 笔记: 实例6: 实例7: 总结 C++ | C++命名空间 C++命名空间 一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突. 当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突. 例如小李和小韩都参与了一个文件管理系统的开发,它们都定义了一个全局变量

  • C++缺省参数的具体使用

    目录 一.缺省参数概念 二.缺省参数分类 全缺省参数 半缺省参数 缺省参数的误区 1.滥用缺省参数,损害代码的结构和可读性. 2.多个缺省参数,可能引入逻辑含混的调用方式 3.重载时可能出现二义性 4.函数调用中的精神分裂症 一.缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个默认值.在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参 #include<iostream> using namespace std; void TestFunc(int a = 0)//

  • C++ 命名空间详解

    目录 一.C++ 命名空间 1.默认NameSpace(Global&Function) 2.语法规则 1.声明 2.使用方法 3.支持嵌套 总结 一.C++ 命名空间 命名空间为了大型项目开发,而引入的一种避免命名冲突的一种机制.比如说,在一个大型项目中,要用到多家软件开发商提供的类库.在事先没有约定的情况下,两套类库可能在存在同名的函数或是全局变量而产生冲突.项目越大,用到的类库越多,开发人员越多,这种冲突就会越明显. 1.默认NameSpace(Global&Function) Gl

  • C++入门(命名空间,缺省参数,函数重载,引用,内联函数,auto,范围for)

    一.C++关键字 C++总共有63个关键字,在入门阶段我们只是大致了解一下就可,在后续博客中会逐渐讲解 二.命名空间 相信学过C++的同学,一定都写过下面这个简单的程序 #include<iostream> using namespace std; int main() { cout<<"hello world"<<endl; return 0; } 我们先来看第二行代码,using namespace std , 这行代码是什么意思呢 ? 这里我们

  • C++缺省参数的理解

    目录 什么叫缺省参数? 缺省多个参数的情况 1.全缺省 2.半缺省 总结 什么叫缺省参数? 缺省参数是声明或定义函数时为函数的参数指定一个默认值.在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参. 注意:要想省略参数,声明或者定义内必须指定默认值 void TestFunc(int a = 0) { cout<<a<<endl; } int main() { TestFunc(); // 没有传参时,使用参数的默认值 TestFunc(10); // 传参时,使用

  • C++命名空间和缺省参数介绍

    一.命名空间 为什么引入命名空间 在C++中,变量.函数和类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的.     int a = 10;          int main(void)     {         int a = 10;         return 0;     } 这里一个a是全局变量,一个a是局部变量.可以编译通过

  • C++入门基础之命名空间、输入输出和缺省参数

    目录 一.命名空间 (1)命名空间的定义 (2)命名空间的使用 (3)全局域 二.输入&&输出 (1) cout (2)cin (3)cin cout自动是识别类型 三.命名空间的展开 (1)使用using namespace 命名空间名称引入 (2)使用using将命名空间中某个成员引入 四.缺省参数 (1)缺省参数概念 (2)缺省参数分类 五.最后 一.命名空间 在C/C++中,变量.函数和后面要学到的类都是大量存在的,这些变量.函数和类的名称将都存 在于全局作用域中,可能会导致很多冲

  • 关于C# 4.0新特性“缺省参数”的实现详解

    前言 C#4.0关于缺省参数的新特性,相信大家都不会陌生.所谓缺省参数,顾名思义,就是在声明方法的某个参数的时候为之指定一个默认值,在调用该方法的时候如果采用该默认值,你就无须指定该参数.和很多语言层面特性(语法糖)的实现一样,缺省参数也是编译器为我们玩的一个小花招.缺省参数最终体现为两个特殊的自定义特性OptionalAttribute和DefaultParameterValueAttribute . 目录 一.缺省参数的用法 二.实现缺省参数的两个特性:OptionalAttribute和D

  • c语言中缺省参数的类型总结

    1.函数全缺省参数,函数在定义或者声明时,所有的形参都默认值. #include <stdio.h> //x,y为函数的形参,如果函数被调用时,没有设置x和y值,x值默认为100,y值默认为5 int sub(int x=100,int y=5) { return (x-y); } int main(void) { int a=20; int b=10; //变量a.b为sub函数的实参 printf("sub函数计算结果 = %d\n",sub(a, b)); //注意:

  • C语言 函数缺省参数详情

    目录 一.函数简介 1.函数声明 2.函数定义 3.函数调用 4.函数形参和实参 二.函数缺省参数 1.函数全缺省参数 2.函数半缺省参数 三.注意事项 一.函数简介 1.函数声明 函数声明只是一个空壳,不会有具体的函数实现,而定义要实现函数的实现,例如: int sub(int x,int y); //只需要声明即可,不需要实现这个函数的功能 2.函数定义 函数的定义需要实现这个函数的功能,例如: int sub(int x,int y) ////需要实现这个函数的功能 { return (x

  • C++浅析缺省参数的使用

    目录 一. 概念 二. 分类 全缺省参数 半缺省参数 一. 概念 缺省参数(有些地方叫默认参数)是声明或定义函数时为函数的参数指定一个默认值.在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参. void TestFunc(int a = 0) { cout << a << endl; } int main() { TestFunc(); //没有传参时,使用参数的默认值 TestFunc(10); //传参时,使用指定的实参 } 二. 分类 全缺省参数 缺省全部参

  • C++简明讲解缺省参数与函数重载的用法

    目录 一.缺省参数 1.1缺省参数概念 1.2缺省参数分类 二.函数重载 2.1函数重载概念 2.2名字修饰 一.缺省参数 缺省参数形象来说就是"备胎". 1.1缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个默认值.在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参. #include<iostream> void P(int a = 3) { printf("%d", a); } int main() { P();//打印

  • C++深入浅出讲解缺省参数

    目录 缺省参数 定义 用法 缺省参数 一般情况下,函数调用时的实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有缺省参数的函数,这种函数调用时,实参个数可以与形参不相同. 定义 缺省参数指在定义函数时为形参指定缺省值(默认值).这样的函数在调用时,对于缺省参数,可以给出实参值,也可以不给出参数值.如果给出实参,将实参传递给形参进行调用,如果不给出实参,则按缺省值进行调用. 缺省参数的函数调用:缺省实参并不一定是常量表达式,可以是任意表达式,甚至可以通过函数调用给出.如果缺省实参是

随机推荐