C++:命名空间namescape,缺省参数

文章目录

    • 1.命名空间namescape
      • 1.1命名空间namescape定义
      • 1.2命名空间namescape规则
    • 2.2 命名空间使用
    • 3 C++输入&输出
    • 4. 缺省参数

1.命名空间namescape

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

#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题,所以C++提出了namespace来解决
int main()
{
printf("%d\n", rand);
return 0;
}
// 编译后后报错:error C2365: “rand”: 重定义;以前的定义是“函数”

在这里插入图片描述

1.1命名空间namescape定义

定义命名空间格式 :

namescape(关键字) name(命名空间名) { } 

命名空间内容:

// 1. 正常的命名空间定义
namespace Lvision
{
// 命名空间中可以定义变量/函数/类型/结构体
int rand = 10;
int Add(int left, int right){return left + right;}
struct Node{struct Node* next;int val;};
}

1.2命名空间namescape规则

  1. 在同一个文件中, 可以定义相同名字的命名空间 , 但不能有相同名字的变量

在这里插入图片描述

同一作用域下,定义了相同的变量名就会报错: error C2374: “Lvision::a”: 重定义;多次初始化
在这里插入图片描述

  1. 命名空间允许嵌套
    在这里插入图片描述
  2. 同一个工程中,允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
// test.h
namespace N1
{
int Mul(int left, int right){return left * right;}
}// test.cpp
namespace N1
{int a;int b;int Add(int left, int right){return left + right;}namespace N2{int c;int d;int Sub(int left, int right){return left - right;}}
}

一个工程中的test.h和上面test.cpp中两个N1会被合并成一个

2.2 命名空间使用

namespace bit
{// 命名空间中可以定义变量/函数/类型
int a = 0;
int b = 1;
int Add(int left, int right)
{return left + right;
}
struct Node{struct Node* next;int val;};
}
int main()
{
// 编译报错:error C2065: “a”: 未声明的标识符 如何使用a?
printf("%d\n", a);
return 0;
}

命名空间的使用有三种方式:

  1. 加命名空间名称及作用域限定符 ::
int main()
{
printf("%d\n", N::a); //使用命名空间N中的a
return 0;
}
  1. 使用using将命名空间中某个成员引入
using N::b; //至扩展出N里b的变量, N里其他的变量不扩展
int main()
{printf("%d\n", N::a);printf("%d\n", b);return 0;
}
  1. 使用using namespace 命名空间名称 引入
using namespce N; // 扩展出N中所有的变量
int main()
{
printf("%d\n", N::a);
printf("%d\n", b);
Add(10, 20);
return 0;
}

3 C++输入&输出

#include<iostream>
// std是C++标准库的命名空间名,C++将标准库的定义实现都放到这个命名空间中
using namespace std;
int main()
{cout<<"Hello world!!!"<<endl;return 0;
}

在这里插入图片描述

  1. 使用cout标准输出对象(控制台)和cin标准输入对象(键盘)时,必须包含 iostream 头文件
    以及按命名空间使用方法使用std。
  2. coutcin是全局的流对象,endl是特殊的C++符号,表示换行输出,他们都包含在包含iostream 头文件中。
  3. <<是流插入运算符,>>是流提取运算符。
  4. 使用C++输入输出更方便,不需要像printf/scanf输入输出时那样,需要手动控制格式。
    C++的输入输出可以自动识别变量类型。
  5. coutcin分别是ostreamistream类型的对象。

注意:早期标准库将所有功能在全局域中实现,声明在.h后缀的头文件中,使用时只需包含对应
头文件即可,后来将其实现在std命名空间下,为了和C头文件区分,也为了正确使用命名空间,
规定C++头文件不带.h;旧编译器(vc 6.0)中还支持< iostream.h >格式,后续编译器已不支持,因此推荐使用< iostream >+std的方式。

4. 缺省参数

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

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

注意:
1. 缺省函数的缺省参数只能从右往左,也就是缺省参数不能在实参前面,

//允许
void Func(int a = 10, int b = 20, int c = 30)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}//允许
void Func(int a , int b = 20, int c = 30)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}//不允许
void Func(int a = 10, int b , int c = 30)
{cout<<"a = "<<a<<endl;cout<<"b = "<<b<<endl;cout<<"c = "<<c<<endl;
}
  1. 缺省值必须是常量或者全局变量
  2. C语言不支持(编译器不支持)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589165.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

烂笔头笔记:Windows 11下照片查看器显示偏色问题修复

本文出处&#xff1a;http://blog.csdn.net/chaijunkun/article/details/137278931&#xff0c;转载请注明。由于本人不定期会整理相关博文&#xff0c;会对相应内容作出完善。因此强烈建议在原始出处查看此文。 最近在研究HDR视频的截图算法&#xff0c;目的就是生成色彩正确…

【JavaWeb】Day25.Web入门——HTTP协议(一)

HTTP协议——概述 1.介绍 HTTP&#xff1a;Hyper Text Transfer Protocol(超文本传输协议)&#xff0c;规定了浏览器与服务器之间数据传输的规则。 http是互联网上应用最为广泛的一种网络协议http协议要求&#xff1a;浏览器在向服务器发送请求数据时&#xff0c;或是服务器在…

华为数通方向HCIP-DataCom H12-821题库(多选题:261-280)

第261题 VRRP可以结合以下哪些机制或技术来监视上行链路的连通性? A、IP-Link B、BFD C、NQA D、接口Track 【正确答案】BCD 【答案解析】 第262题 以下关干RSTP根保护的说法正确的是? A、根端口上开启根保护功能会生效 B、开启根保护的端口再收到优先级更高的RSTBPDU之后如…

经典文献阅读之--i-Octree(用于最近邻搜索的快速、轻量级和动态的八叉树)

0. 简介 在众多机器人应用中&#xff0c;通过最近邻搜索建立新采集点与历史累积数据&#xff08;即地图&#xff09;之间的对应关系至关重要。然而&#xff0c;静态树数据结构不足以实时处理大型且动态增长的地图。为了解决这个问题&#xff0c;我们在文中《i-Octree: A Fast,…

HarmonyOS NEXT应用开发之MVVM模式

应用通过状态去渲染更新UI是程序设计中相对复杂&#xff0c;但又十分重要的&#xff0c;往往决定了应用程序的性能。程序的状态数据通常包含了数组、对象&#xff0c;或者是嵌套对象组合而成。在这些情况下&#xff0c;ArkUI采取MVVM Model View ViewModel模式&#xff0c;其…

使用deepspeed小记

1. 减少显存占用的历程忠告 医学图像经常很大&#xff0c;所以训练模型有时候会有难度&#xff0c;但是现在找到了很多减少显存的方法。 不知道为什么&#xff0c;使用transformers的trainer库确确实实会减少显存的占用&#xff0c;即使没有使用deepspeed&#xff0c;占用的显…

nginx与tomcat的区别?

关于nginx和tomcat的概念 网上有很多关于nginx和tomcat是什么东西的定义&#xff0c;我总结了一下: tomcat是Web服务器、HTTP服务器、应用服务器、Servlet容器、web容器。 Nginx是Web服务器、HTTP服务器、正向/反向代理服务器&#xff0c;。 这里有两个概念是交叉的&#xff…

网络编程套接字应用分享【Linux C/C++ 】【UDP应用 | TCP应用 | TCP线程池小项目】

目录 前提知识 1. 理解源ip&#xff0c;目的ip和Macip 2. 端口号 3. 初识TCP&#xff0c;UDP协议 4. 网络字节序 5. socket 编程 sockaddr类型 一&#xff0c;基于udp协议编程 1. socket——创建套接字 2. bind——将套接字强绑定 3. recvfrom——接受数据 4. s…

深入探索:主流低代码开发平台的应用场景及开发流程

前言&#xff1a; 2014年&#xff0c;全球权威资讯机构 Forrester 首次在报告中引入了低代码的概念&#xff0c;放眼彼时的中国市场&#xff0c;低代码这一名词还鲜为人知。 直到近几年&#xff0c;随着国家积极推动数字经济&#xff0c;大力扶持企业数字化发展《加强数字化发…

34.Python从入门到精通—Python3 正则表达式检索和替换

34.从入门到精通&#xff1a;Python3 正则表达式检索和替换 repl 参数是一个函数 正则表达式对象 正则表达式修饰符 - 可选标志 正则表达式模式* 正则表达式实例 检索和替换repl 参数是一个函数正则表达式对象正则表达式修饰符 - 可选标志正则表达式模式*正则表达式实例 检索和…

Java中的可变字符串

Java中的可变字符串 一、什么是可变字符串二、可变字符串的使用场景以及使用步骤1.新建一个可变字符串2.可变字符串的一系列方法 一、什么是可变字符串 可变字符串是Java.lang包下的 在我们学习到JDBC的时候需要将原有的sql语句根据不同的差异添加一段新的关键字或者单词&…

Python 代码混淆工具概述

在保护Python代码安全方面&#xff0c;有多种混淆工具可供选择&#xff0c;包括 Cython, Nuitka, Pyminifier 和 IPA guard。本文将介绍这些工具的特点和适用情况&#xff0c;以及在实际应用中的注意事项。 &#x1f4dd; 摘要 本文探讨了几种常见的 Python 代码混淆工具&am…