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++的命名空间相关推荐

  1. OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)

    1. 由于宏名称的变更照成的"未声明的标识符"系列问题 有时候,遇到此类问题加入一句 #include <cv.h> 便可以让 OpenCV3 或者 OpenCV4 也 ...

  2. 解读Python的命名空间

    前面我们理解了变量.函数的作用域,现在我们再深入讨论一下Python是如何给变量.函数划分作用域的. 我们在编写Python程序的过程中,如果要使用变量和函数,都需要先对变量和函数命名后才能使用.Py ...

  3. C++ 笔记(03)— 命名空间(概念、定义、调用、using name 指令、嵌套命名空间)

    1. 命名空间概念 在 C++ 应用程序中, 您可能会写一个名为 func() 的函数,在另一个可用的库中也存在一个相同的函数 func() .这样,编译器就无法判断您所使用的是哪一个 func() ...

  4. C++ 笔记(02)— 程序结构(头文件说明、命名空间、函数返回值、函数参数、注释、语句结束符、cin/cout)

    先看以下代码 #include <iostream> #include <string> using namespace std;int main() // main() 是程 ...

  5. c++标准库 及 命名空间std

    1.命名空间std C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题.有了命名空间的概念,标识符就被限制在特定的范围(函数)内,不会引起命名冲突.最典型的例子就是st ...

  6. 不同命名空间的对象二进制反序列化问题

    本质上说,这并不是二进制序列化的问题,甚至不关序列化的问题. 你想要的是在两个内部结构一致但在不同命名空间(甚至不同项目)的同名类间做类型转换. 这个问题很常见,因为实际工作中经常会有此类需求,但是我 ...

  7. 关于命名空间namespace

    虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits).接口.函数和常量. 在声明命名空间之前唯一合法的代码是用于定义源文件编码方 ...

  8. .NET 框架中的 WMI 命名空间

    .NET 框架中的 WMI 命名空间   .NET框架中与WMI规范有关的命名空间有两个,分别是System.Management和System.Management.Instrumentation两 ...

  9. Namespace(命名空间)的使用

    作者:飞刀 关于Namespace(命名空间)的使用常用<% @ Import Namespace="System.Data" %>,这是在引用M$为我们提供的Name ...

  10. 【C++】C++命名空间重定向

    参见博客: namespace使用总结 命名空间的重定向的格式: namespace newName = oldName; 在caffe源码走读时,遇到namespace的重定向用法,以前没有用过,源 ...

最新文章

  1. 20位程序员关于求职的疑问,以及我给出的参考答案
  2. APP专项测试关注点介绍
  3. JSP九大内置对象...
  4. sqlserver 2008 R2 删除重复数据
  5. create-react-app的template和assembed resource
  6. 在PyTorch中转换数据
  7. Centos下Nodejs+npm环境-部署记录
  8. java c 基本类型_java 基本数据类型
  9. php string常用函数
  10. Python 实现针对时间序列预测的特征选择
  11. PR第三次培训笔记(视频效果 转场)
  12. 【Python爬虫】花瓣网爬取美女图片
  13. 微信小程序 -- 授权地理位置
  14. spring和jump区别_JUMP与 SKIP 的区别
  15. 记录一次实战破解无线wifi——Aircrack-ng
  16. Part-02/通过案例学爬虫(豆瓣电影TOP250)
  17. geonode geoserver win10 安装教程(亲测)
  18. centos 计算器_计算初学者进行服务器centos 7.6系统及orca、xtb、gaussian 16软件的安装乱谈...
  19. 【学习记录】QT5界面设计的踩坑记录
  20. css兼容浏览器火狐,常见IE和火狐的CSS兼容性问题

热门文章

  1. composer 报错:composer [ReflectionException] Class Fxp\Composer\AssetPlugin\Repository\NpmRepository
  2. win10安装centos子系统
  3. Java计算点的质心_java-矩阵的质心
  4. google阅读器快捷键
  5. 最难忘的一节计算机课,作文:最难忘的一节课
  6. 【汇编程序】实现输出2012-2100年之间所有闰年
  7. 语法长难句-----名词和名词性从句
  8. 软件公司如何才能留住员工
  9. java设计一个bank类实现银行_关于JAVA设计一个银行账户管理类
  10. 批处理版音视频播放器(甲兵时代原创批处理)(上)