網站首頁 編程語言 正文
正文
c++在開發的過程當中需要使用到庫函數,那么基于庫函數的使用最初的流程是:1、include 相關的頭文件,比如:iostream,string。 2、使用命名空間::庫函數,比如:std::cin,std::cout,但是這樣寫總是有點麻煩的,所以可以嘗試簡化寫法,就是using聲明。
注意,這里的 :: 是作用域運算符,就是用來指向命名空間空間當中的方法的。
最初的c++代碼寫法
#include <iostream>
int main(){
std::cout << "hello world" << std::endl;
return 0;
}
在這段代碼當中,我們引入了iostream文件,cout和endl函數在iostream下的std當中,所以需要采用std::cout和std::endl的方法使用功能。
但是如果代碼量巨增,這樣的寫法還是繁瑣的,那么這個時候就可以采用using方法了,代碼如下:
#include <iostream>
int main(){
using std::cout;
using std::endl;
cout << "hello world" << endl;
return 0;
}
這段代碼當中,比上面的代碼多了兩行using方法,但是如果下面使用cout和endl方法的語句比較多的話,就可以省力很多了。但是上面的寫法必須把所有的需要的方法都顯式的聲明出來,比如:
#include <iostream>
int main(){
using std::cout;
cout << "hello world" << endl;
return 0;
}
這里聲明了cout,但是在使用的過程當中,除了count還使用了endl,那么這個時候是會報錯的
main.cpp: In function ‘int main()':
main.cpp:5:29: error: ‘endl' was not declared in this scope
cout << "hello world" << endl;
^
main.cpp:5:29: note: suggested alternative:
In file included from /usr/include/c++/4.8.2/iostream:39:0,
from main.cpp:1:
/usr/include/c++/4.8.2/ostream:564:5: note: ‘std::endl'
endl(basic_ostream<_CharT, _Traits>& __os)
^
那么有沒有更加簡單的寫法,我們可以嘗試直接using 整個std
#include <iostream>
int main(){
using namespace std;
cout << "hello world" << endl;
return 0;
}
那么我們來聊聊using到底是干什么的:
在聊using之前,先搞清楚一個概念,就是命名空間,命名空間是C++引入的可以由用戶命名的作用域,用來處理程序中常見的同名沖突。而作用域就是定義一個量,這個量在代碼當中起作用的范圍。
那么接下來看using,using是用來聲明命名空間的,聲明命名空間實際上就是把指定的標識符加載到當前的作用域當中,直接使用。
但是這里有幾個思考的點:
1、在學習c++的時候有一類文件叫做頭文件,就比如剛才案例當中導入的iostream,在這類文件當中盡量不要使用using,因為來回包括太多隱式的變量,容易導致變量沖突。
2、using聲明的一定要是include加載的,所以要卸載include的后面。
3、using寫在代碼的不同位置,產生的效用也是不一樣的,這個需要結合作用域來詳細理解(挖個坑,后來填上)
4、個人感覺using std::cout 寫法上確實比 using namespace std要繁瑣,但是使用的變量更加精確,因為using namespace std調用命名空間std內定義的所有標識符,其實代碼當中沒有用到那么多。
原文鏈接:https://juejin.cn/post/7173798388935163934
相關推薦
- 2022-06-30 python神經網絡MobileNet模型的復現詳解_python
- 2022-03-11 UE4 添加自己項目的AutomationProject,解決報錯Failed to find co
- 2022-12-10 React實現控制減少useContext導致非必要的渲染詳解_React
- 2022-05-23 一起來學習Python的列表_python
- 2022-03-15 feign.RetryableException: Read timed out executing
- 2022-11-23 Python?hashlib模塊與subprocess模塊使用詳細介紹_python
- 2022-11-08 Python??Pandas教程之使用?pandas.read_csv()?讀取?csv_pytho
- 2022-03-08 Docker自定義網絡詳細介紹_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支