C++核心准则SF.6:(只)为转换,基础库或在局部作用域内部使用using namspace指令
SF.6: Use using namespace directives for transition, for foundation libraries (such as std), or within a local scope (only)
SF.6:(只)为转换,基础库(例如std)或在局部作用域内部使用using namspace指令
Reason(原因)
using namespace can lead to name clashes, so it should be used sparingly. However, it is not always possible to qualify every name from a namespace in user code (e.g., during transition) and sometimes a namespace is so fundamental and prevalent in a code base, that consistent qualification would be verbose and distracting.
using namespace可能导致名称冲突,因此应该谨慎使用。然而,在用户代码中,不可能为所有名称限定命名空间(例如在转换期间),而且在基础代码中,有时命名空间如此基础和普遍,以至于始终如一地指定命名空间会显得冗长并分散注意力。
Example(示例)
#include <string>
#include <vector>
#include <iostream>
#include <memory>
#include <algorithm>
using namespace std;
// ...
Here (obviously), the standard library is used pervasively and apparently no other library is used, so requiring std:: everywhere could be distracting.
代码中,标准库被普遍使用而且很显然没有其他库被使用,因此到处要求std::容易分散注意力。
Example(示例)
The use of using namespace std; leaves the programmer open to a name clash with a name from the standard library
使用using namspadce std;会导致程序完全暴露在和标准库名称发生冲突的危险之下。
#include <cmath>
using namespace std;
int g(int x)
{
int sqrt = 7;
// ...
return sqrt(x); // error
}
However, this is not particularly likely to lead to a resolution that is not an error and people who use using namespace std are supposed to know about std and about this risk.
然而,也不是一定能得出这不是一个错误的判断。而且使用std命名空间的人被假定已经理解std和这类风险。
Note(注意)
A .cpp file is a form of local scope. There is little difference in the opportunities for name clashes in an N-line .cpp containing a using namespace X, an N-line function containing a using namespace X, and M functions each containing a using namespace Xwith N lines of code in total.
.cpp文件是局部作用域的一种类型。需要注意的是:在一个N行的.cpp文件中包含using namespae X,在N行函数中包含using namspace X,一共N行代码的M个函数每个都包含一个usning namespace X,这几种情况下出现问题的机会存在些许不同。
Note(注意)
Don't write using namespace in a header file.
不要再头文件中使用using namespace。
Enforcement(实施建议)
Flag multiple using namespace directives for different namespaces in a single source file.
标记在同一个源文件中多次使用using namespace指令导入不同命名空间的情况。
原文链接
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#sf6-use-using-namespace-directives-for-transition-for-foundation-libraries-such-as-std-or-within-a-local-scope-only
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- IMDB影评数据集预处理(使用word2vec)
- 【leetCode】使用两个栈搞一个队列day05
- bert训练代码
- mybatis文件映射之自定义返回结果集
- maven之第一个maven程序
- 【LeetCode】重建二叉树day04
- 【LeetCode】从尾到头反过来返回每个节点的值(用数组返回)day03
- mybatis文件映射之利用association进行关联查询(二)
- 【JUC】CountDownLatch你真的了解吗?
- mybatis动态sql之foreach补充(一)
- 【LeetCode】把字符串 s 中的每个空格替换成““%20””day02
- bert加载数据代码
- python爬虫--看看虎牙女主播中谁颜值最高
- 基于maven+ssm的增删改查之maven环境的搭建
- (22)Bash环境变量