Cherno C++ P61 C++的命名空间
YouTube视频链接
C++的命名空间
本文是ChernoP61视频的学习笔记。
如P60的代码,有两个print函数它们有不同的函数签名,一个参数是string,一个参数是const char。若转变为两者都接受const char*,不使用命名空间可能会出现问题。
#include<iostream>
#include<string>//namespace apple {void print(const char* text){std::cout << text << std::endl;}
//}//namespace orange {void print(const char* text){std::string temp = text;std::reverse(temp.begin(), temp.end());std::cout << temp << std::endl;}
//}int main()
{print("Hello");std::cin.get();
}
按crtl+F7编译会报错,它告诉我们这个print函数参数是const char*的,已经有了函数体。我们有两个相同名字的符号,会产生编译或者链接错误。
C语言没有命名空间,C语言库的写法如下。
#include<iostream>
#include<string>//namespace apple {void apple_print(const char* text){std::cout << text << std::endl;}
//}//namespace orange {void orange_print(const char* text){std::string temp = text;std::reverse(temp.begin(), temp.end());std::cout << temp << std::endl;}
//}int main()
{apple_print("Hello");std::cin.get();
}
命名空间的主要目的是避免命名冲突,类本身也是一种命名空间。
使用using namespace可以不写orange或apple前缀。
若apple有多个函数比如print_again,但只想单独引入print函数,可以使用using apple::print。
#include<iostream>
#include<string>namespace apple {void print(const char* text){std::cout << text << std::endl;}void print_again(){}
}namespace orange {void print(const char* text){std::string temp = text;std::reverse(temp.begin(), temp.end());std::cout << temp << std::endl;}
}int main()
{using apple::print;print("Hello");apple::print_again();std::cin.get();
}
也可以给命名空间取别名。
int main()
{namespace a = apple; //a只存在于main函数的作用域下a::print("Hello");std::cin.get();
}
Cherno C++ P61 C++的命名空间相关推荐
- OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)
1. 由于宏名称的变更照成的"未声明的标识符"系列问题 有时候,遇到此类问题加入一句 #include <cv.h> 便可以让 OpenCV3 或者 OpenCV4 也 ...
- 解读Python的命名空间
前面我们理解了变量.函数的作用域,现在我们再深入讨论一下Python是如何给变量.函数划分作用域的. 我们在编写Python程序的过程中,如果要使用变量和函数,都需要先对变量和函数命名后才能使用.Py ...
- C++ 笔记(03)— 命名空间(概念、定义、调用、using name 指令、嵌套命名空间)
1. 命名空间概念 在 C++ 应用程序中, 您可能会写一个名为 func() 的函数,在另一个可用的库中也存在一个相同的函数 func() .这样,编译器就无法判断您所使用的是哪一个 func() ...
- C++ 笔记(02)— 程序结构(头文件说明、命名空间、函数返回值、函数参数、注释、语句结束符、cin/cout)
先看以下代码 #include <iostream> #include <string> using namespace std;int main() // main() 是程 ...
- c++标准库 及 命名空间std
1.命名空间std C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题.有了命名空间的概念,标识符就被限制在特定的范围(函数)内,不会引起命名冲突.最典型的例子就是st ...
- 不同命名空间的对象二进制反序列化问题
本质上说,这并不是二进制序列化的问题,甚至不关序列化的问题. 你想要的是在两个内部结构一致但在不同命名空间(甚至不同项目)的同名类间做类型转换. 这个问题很常见,因为实际工作中经常会有此类需求,但是我 ...
- 关于命名空间namespace
虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits).接口.函数和常量. 在声明命名空间之前唯一合法的代码是用于定义源文件编码方 ...
- .NET 框架中的 WMI 命名空间
.NET 框架中的 WMI 命名空间 .NET框架中与WMI规范有关的命名空间有两个,分别是System.Management和System.Management.Instrumentation两 ...
- Namespace(命名空间)的使用
作者:飞刀 关于Namespace(命名空间)的使用常用<% @ Import Namespace="System.Data" %>,这是在引用M$为我们提供的Name ...
- 【C++】C++命名空间重定向
参见博客: namespace使用总结 命名空间的重定向的格式: namespace newName = oldName; 在caffe源码走读时,遇到namespace的重定向用法,以前没有用过,源 ...
最新文章
- 20位程序员关于求职的疑问,以及我给出的参考答案
- APP专项测试关注点介绍
- JSP九大内置对象...
- sqlserver 2008 R2 删除重复数据
- create-react-app的template和assembed resource
- 在PyTorch中转换数据
- Centos下Nodejs+npm环境-部署记录
- java c 基本类型_java 基本数据类型
- php string常用函数
- Python 实现针对时间序列预测的特征选择
- PR第三次培训笔记(视频效果 转场)
- 【Python爬虫】花瓣网爬取美女图片
- 微信小程序 -- 授权地理位置
- spring和jump区别_JUMP与 SKIP 的区别
- 记录一次实战破解无线wifi——Aircrack-ng
- Part-02/通过案例学爬虫(豆瓣电影TOP250)
- geonode geoserver win10 安装教程(亲测)
- centos 计算器_计算初学者进行服务器centos 7.6系统及orca、xtb、gaussian 16软件的安装乱谈...
- 【学习记录】QT5界面设计的踩坑记录
- css兼容浏览器火狐,常见IE和火狐的CSS兼容性问题
热门文章
- composer 报错:composer [ReflectionException] Class Fxp\Composer\AssetPlugin\Repository\NpmRepository
- win10安装centos子系统
- Java计算点的质心_java-矩阵的质心
- google阅读器快捷键
- 最难忘的一节计算机课,作文:最难忘的一节课
- 【汇编程序】实现输出2012-2100年之间所有闰年
- 语法长难句-----名词和名词性从句
- 软件公司如何才能留住员工
- java设计一个bank类实现银行_关于JAVA设计一个银行账户管理类
- 批处理版音视频播放器(甲兵时代原创批处理)(上)