Cherno C++ P60 为什么我不使用using namespace std

2023-10-17 04:50

本文主要是介绍Cherno C++ P60 为什么我不使用using namespace std,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

YouTube视频链接

为什么我不使用using namespace std

本文是ChernoP60视频的学习笔记。
  在之前的代码中,有很多实例使用了标准库中的东西。比如std::vector,std::cout,std::cin.get()等。每次使用标准库中的函数时,需要在前面输入std::。若在文件的上面加上using namespace std;就不用这么做了。

#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>using namespace std;void ForEach(const vector<int>& values,const function<void(int)>& func)
{for (int value : values)func(value);
}int main()
{vector<int> values = { 1,5,4,2,3 };auto it = find_if(values.begin(), values.end(), [](int value) {return value > 3;});cout << *it <<  endl;int a = 5;auto lambda = [=](int value) mutable {a = 6; cout << " Value:" << a << endl;};ForEach(values, lambda);cin.get();
}

  我们可以在函数内部局部声明它,比如在main函数中,意思是应用于这个作用域。

#include<iostream>
#include<vector>
#include<functional>
#include<algorithm>//仍需要std::
void ForEach(const std::vector<int>& values,const std::function<void(int)>& func)
{for (int value : values)func(value);
}int main()
{using namespace std;vector<int> values = { 1,5,4,2,3 };auto it = find_if(values.begin(), values.end(), [](int value) {return value > 3;});cout << *it << endl;int a = 5;auto lambda = [=](int value) mutable {a = 6;cout << " Value:" << a << endl;};ForEach(values, lambda);cin.get();
}

  但是我们的原始代码很容易就能指出使用的是标准模板库和C++库,带有std前缀的来自于标准库,若使用using namespace std就会难分辨。如下代码

#include<iostream>
#include<string>namespace apple {void print(const std::string& text){std::cout << text << std::endl;}
}using namespace apple;int main()
{//apple::print("Hello");print("Hello");std::cin.get();
}

  若又引入了一个库命名空间为orange,把text赋值到一个字符串中,然后把字符串倒过来再打印出来。现在print函数的麻烦来了,若同时使用using namespace apple;和using namespace orange;,哪一个会被调用呢?
在这里插入图片描述
  它反向打印了文本,"Hello"是一个const char数组,它不是一个string。若没有orang命名空间,apple里可以做一个隐式转换,因为const char数组可以转换成string对象。当引入orange后,它的pring函数会更加匹配。这里就是const char*,不需要任何转换。
  当使用这样的代码时,它会调用完全不同的函数。这不是一种编译错误而是无声的运行时错误。若不使用using namespace apple和orange,使用apple::print即可。
在这里插入图片描述
  我们要注意避免在头文件内部使用using namespace。

这篇关于Cherno C++ P60 为什么我不使用using namespace std的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/223044

相关文章

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四