網(wǎng)站首頁 編程語言 正文
引言
你是不是只認為namespace 和 using 在C++中是基本的語法框架,但是卻不知道它們的真正用法,看完文章你會對using和namespace有一定了解,幫助你深入學習C++
一: 冒號作用域
:: 運算符是一個作用域,如果::前面什么都沒有加 代表是全局作用域
也就是如果你輸入的數(shù)前加了:: 代表是全局變量?
代碼?
#include <iostream>
using namespace std;
int a = 100;
void test01()
{
int a = 10;
cout << a << endl; //打印局部變量
cout << ::a << endl; //打印全局變量
}
int main()
{
test01();
return 0;
}
最后結(jié)果
10
100
二、名字控制
1 命令空間
namespace 本質(zhì)是作用域,可以更好的控制標識符的作用域
命名空間 就可以存放 變量 函數(shù) 類 結(jié)構(gòu)體 ...
2 命令空間的使用
1)命令空間的定義 必須定義在全局范圍
2)命名空間下可以存放 變量 函數(shù) 結(jié)構(gòu)體 類
namespace A
{
int a = 1;
void fun()
{
cout << "hello namespace" << endl;
}
void foo(int agr);
struct std //結(jié)構(gòu)體
{};
class obj //類
{};
}
3)命名空間可以重名 重名的命名空間相當于做合并操作
namespace B
{
int a = 10;
int b = 20;
}
//命名空間可以重名
namespace B
{
int c = 100;
}
4)命名空間可以嵌套命名空間
//命名空間可以嵌套
namespace C
{
int a = 10;
int b = 20;
namespace D
{
int a = 100;
}
}
void test02()
{
cout << C::a << endl;
cout << C::D::a << endl;
}
5)命名空間可以取別名, namespace newname = oldname;新名字與舊名字有同等效益
namespace NewA = A;
6)命名空間可以沒有名字 ,沒有名字相當于給命名空間 內(nèi)的所有成員加上了static修飾
相當于只能被當前文件調(diào)用,屬于內(nèi)部鏈接屬性
namespace {
int a = 10;
void func() { cout << "hello namespace" << endl; }
}
7)命名空間中的函數(shù)可以先聲明,在外部定義,定義時需要加上命名空間作用域
namespace A
{
void foo(int agr);
}
void A::foo(int arg)
{
cout << arg << endl;
}
void test03()
{
A::foo(222);
}
總的代碼
#include <iostream>
using namespace std;
// 命令空間的定義 必須定義在全局范圍
// 命名空間下可以存放 變量 函數(shù) 結(jié)構(gòu)體 類
// 命名空間可以重名 重名的命名空間相當于合并操作
// 命名空間可以嵌套命令空間
namespace A
{
int a = 1;
void fun()
{
cout << "hello namespace" << endl;
}
void foo(int agr);
struct std //結(jié)構(gòu)體
{};
class obj //類
{};
}
//與A作用域下定義不一樣,這個在全局作用域下
void A::foo(int arg)
{
cout << arg << endl;
}
namespace NewA = A;
//命名空間是可以取別名
// namespace newname = oldname
namespace B
{
int a = 10;
int b = 20;
}
//命名空間可以重名
namespace B
{
int c = 100;
}
//命名空間可以嵌套
namespace C
{
int a = 10;
int b = 20;
namespace D
{
int a = 100;
}
}
void test01()
{
cout << A::a << endl;
cout << B::a << endl;
cout << B::b << endl;
cout << B::c << endl;
A::fun(); //表示A空間中fun函數(shù)調(diào)用
}
void test02()
{
cout << C::a << endl;
cout << C::D::a << endl;
}
void test03()
{
A::foo(222);
}
namespace {
int a = 10;
void func() { cout << "hello namespace" << endl; }
}
int main()
{
test01();
test02();
test03();
return 0;
}
?三、?using的指令
1 using的聲明
usinng 的聲明可以使得指定標識符可用
注意: 當using聲明的標識符和其他同名標識符有作用域的沖突時,會產(chǎn)生二義性
namespace nameA
{
int a = 10;
void foo()
{
cout << "Hello using" << endl;
}
}
void test01()
{
//注意當using指定聲明標識符和其他標識符作用域有作用域的沖突時,會產(chǎn)生二義性
//int a = 100
using nameA::a;
using nameA::foo;
cout << nameA::a << endl;
cout << a << endl;
foo();
}
2 using的編譯指令
void test02()
{
int a = 1000;
// using編譯指令使整個命名空間標識符可用
using namespace nameA;
cout << a << endl; //結(jié)果為1000,就近原則
foo();
}
總結(jié)代碼
#include <iostream>
using namespace std;
namespace nameA
{
int a = 10;
void foo()
{
cout << "Hello using" << endl;
}
}
void test01()
{
//注意當using指定聲明標識符和其他標識符作用域有作用域的沖突時,會產(chǎn)生二義性
//int a = 100
using nameA::a;
using nameA::foo;
cout << nameA::a << endl;
cout << a << endl;
foo();
}
void test02()
{
int a = 1000;
// using編譯指令使整個命名空間標識符可用
using namespace nameA;
cout << a << endl; //結(jié)果為1000,就近原則
foo();
}
int main()
{
test01();
test02();
}
?輸出
總結(jié)
原文鏈接:https://blog.csdn.net/qq_64691289/article/details/128339110
相關(guān)推薦
- 2022-09-20 linux系統(tǒng)下用.sh文件執(zhí)行python命令的方法_linux shell
- 2022-04-12 C#實現(xiàn)六大設(shè)計原則之接口隔離原則_C#教程
- 2023-08-01 el-table 拖拽列寬出現(xiàn)空白列問題
- 2022-09-05 C語言如何實現(xiàn)頭插法建立單鏈表_C 語言
- 2023-02-18 Framework中實現(xiàn)OC和Swift的混編方案_IOS
- 2022-09-07 C語言函數(shù)調(diào)用約定和返回值詳情_C 語言
- 2022-04-09 用C語言實現(xiàn)簡單的計算器功能_C 語言
- 2022-03-21 .NET?6開發(fā)TodoList應(yīng)用之實現(xiàn)ActionFilter_實用技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支