【C++】命名空间详解

这篇具有很好参考价值的文章主要介绍了【C++】命名空间详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【C++】命名空间详解,C++,c++,开发语言,visual studio

目录

前言

命名空间的定义

 命名空间的使用



【C++】命名空间详解,C++,c++,开发语言,visual studio

前言

在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”: 重定义;以前的定义是“函数”

命名冲突:

C++ 要求所有标识符都是无歧义的。如果将两个相同的标识符引入到同一程序中,而编译器或链接器无法区分它们,则编译器或链接器将产生错误。此错误通常称为命名冲突

如果将冲突标识符引入到同一文件中,则结果将是编译器错误。如果将冲突标识符引入到属于同一程序的单独文件中,则结果将是链接器错误。

命名空间的定义

命名空间是一个区域,允许您在其内部声明名称以消除歧义。命名空间为其中声明的名称提供了一个作用域区域(称为命名空间作用域),这仅仅意味着在命名空间内声明的任何名称都不会被误认为是其他作用域中的相同名称。

在命名空间中声明的名称不会被误认为是在另一个作用域中声明的相同名称。

在命名空间中,所有名称都必须是唯一的,否则将导致命名冲突。

在命名空间域内,可以包含以下内容:

① 变量、对象以及它们的初始化。

② 枚举常量。

③ 函数声明以及函数定义。

④ 类、结构体声明与实现。

⑤ 模板。

⑥ 其他命名

namespace test
{
	int a = 10;
	int rand = 10;//变量
	int add(int x, int y)//函数
	{
		return x + y;
	}
	struct Node//结构体
	{
		struct Node* next;
		int val;
	};
}

 嵌套命名空间

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会被合并成一个

// test.h
namespace N1
{
int Mul(int left, int right)
{
return left * right;
}
}

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
 

namespace A
{
	int a = 10;
}
namespace B
{
	int a = 20;
}

int main()
{
	cout << A::a << endl;
	cout << B::a << endl;
}

【C++】命名空间详解,C++,c++,开发语言,visual studio

 不同命名空间内可以存在相同名称的变量,二者互不影响

 命名空间的使用

使用命名空间名称及作用域限定符

namespace A
{
	int a = 10;
}
namespace B
{
	int a = 20;
}

int main()
{
	cout << A::a << endl;
	cout << B::a << endl;
}

 使用using将命名空间中某个成员引入

using N::b;
using std::cin;
using std::cout;
using std::endl;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);
    cout<<b<<endl;
    return 0;
}

使用using namespace 命名空间名称引入

这个方法在平时做题时可以使用,但是在正式的工程项目中不建议使用,因为全部展开可以会发生命名冲突。文章来源地址https://www.toymoban.com/news/detail-823332.html

using namespce N;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);
    Add(10, 20);
    return 0;
}
  • 命名空间域内部封装的在展开之后相当于在全局域
  • 命名空间的展开是将命名空间域打开,编译器搜索时可以到命名空间里搜索,命名空间不展开时,编译器不会到命名空间里搜索
  • 包含头文件的展开是在预处理阶段将头文件的内容拷贝到源文件里

到了这里,关于【C++】命名空间详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ 之命名空间namespace【详解】

    命名空间(Namespace)在编程中的作用主要有以下几点意义 避免命名冲突:命名空间提供了一种将标识符(如变量、函数、类等)组织和隔离的方式。不同的命名空间可以拥有相同名称的标识符,避免了不同模块或库之间的命名冲突。 提高可读性和可维护性:通过使用命名空

    2024年02月16日
    浏览(34)
  • VSIX:C#项目 重命名所有标识符(Visual Studio扩展开发)

            出于某种目的(合法的,真的合法的,合同上明确指出可以这样做),我准备了一个重命名所有标识符的VS扩展,用来把一个C#库改头换面,在简单的测试项目上工作很满意,所有标识符都被准确替换。我还尝试用在C++项目上,问题就比较多了,因为VS并不能准确识别

    2024年02月05日
    浏览(52)
  • 详解C++中的命名空间(namespace)

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【C++之路】 在C++中,总共有63个,大家还记得在C语言中有多少个吗,没错,在C语言中总共有32个。 下面是C++的: asm do if auto return try contin

    2023年04月19日
    浏览(34)
  • 【Visual Studio】报错 ASSERT: “i >= 0 && i < size()“,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面。 使用 C++ 语言,配合 Qt 开发串口通信界面,在调试动态绘图

    2024年02月11日
    浏览(52)
  • 【C++对于C语言的扩充】C++与C语言的联系,命名空间、C++中的输入输出以及缺省参数

    铁子们好啊!这是阿辉新开的专栏《拿下C++》的第一篇文章,本文主要带大家了解一下C++,带大家从C语言过渡到C++,所以大家首先要有C语言的基础,否则后面的内容你可能会异常懵逼。不会C语言的铁子,这里推荐各位先看阿辉的专栏《爱上C语言》(点击即可跳转,自荐一下

    2024年02月03日
    浏览(35)
  • 刘铁猛C#语言入门详解课程听课笔记--初识类与命名空间

    类:构成程序的主体;C语言是一门面向过程的程序设计语言,所以其用函数来组织程序;C#语言是一门完全面向对象的程序设计语言,其用类来组织程序,类是构成程序的主体,任何一个方法和变量都必须隶属于某一个具体的类;而C++也是一门面向对象的程序设计语言,但是

    2024年02月13日
    浏览(35)
  • 【C++初阶】关键字&命名空间&缺省函数&函数重载入门必看!!!超详解!!!

     ========================================================================= 主页点击直达: 个人主页 我的小仓库:代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 计算机

    2024年02月07日
    浏览(45)
  • <c++开发> Visual Studio使用开发-相关问题杂录

    <c++开发> Visual Studio使用开发-相关问题杂录 问题1:使用Visual Studio2022 运行Visual Studio2019的工程发生 error MSB8020 前景:使用Visual Studio2022 运行Visual Studio2019的工程; 错误如下: G:WorkSoftVS2022MSBuildMicrosoftVCv170Microsoft.CppBuild.targets(442,5): error MSB8020: 无法找到 Visual Studio 2019 的

    2024年02月08日
    浏览(48)
  • Visual Studio 2017下的C++开发环境搭建

    Visual Studio 是Microsoft旗下的开发工具包系列产品,是一个基本完整的开发工具集,它包括整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等,是最流行的Windows平台应用程序的集成开发环境。 Visual Studio 适用于 Windows 上 .NET 和 C++ 开

    2024年02月13日
    浏览(59)
  • Windows搭建C++开发环境(visual studio 2022)

    开发环境的搭建 开发工具:vscode、visual studio 2022、visual studio 2019、2015、2010 .. 安装步骤(以Windows下visual studio2022为例): 打开官网地址  Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com) 下载社区版2022   下载完成后打开 步骤如下 安装完成后会自动打开出现

    2024年02月06日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包