Re: [問卦] C++20 也太機車了吧?
※ 引述《HankYang (黃金神掌)》之銘言:
: 如題
: 就是我啦!
: 最近無聊去看C++20的新特性
: 靠北呀
: #include感覺要被淘汰惹
: 要改成類似python或javascript的module
: 變成import跟export
: 然後新的range library
: 靠背怎麼那麼像js
: C++是不是要變成妖魔鬼怪了
: 有沒有八卦
剛剛隨便Google了一下,這邊有篇文章講到Module的優點
https://www.modernescpp.com/index.php/cpp20-modules
考慮下面這個寫在 helloWorld.cpp 裡面的簡單程式
// helloWorld.cpp
#include <iostream>
int main() {
std::cout << "Hello World" << std::endl;
}
本來.cpp檔案大小 100,compile完變成executable是 12928
https://www.modernescpp.com/images/blog/Cpp20/Cpp20Modules/helloWorld.png
但在變成executable前,中間有一個 preprocessing,
也就是把那些 #include and #define的東西全部換成對應的文字。
https://www.modernescpp.com/images/blog/Cpp20/Cpp20Modules/preprocessor.png
而你如果把上面那個 HelloWorld 拆成幾個檔案
// hello.cpp
#include "hello.h"
void hello() {
std::cout << "hello ";
}
// hello.h
#include <iostream>
void hello();
// world.cpp
#include "world.h"
void world() {
std::cout << "world";
}
// world.h
#include <iostream>
void world();
// helloWorld2.cpp
#include <iostream>
#include "hello.h"
#include "world.h"
int main() {
hello();
world();
std::cout << std::endl;
}
在你 compile helloWorld2.cpp 的過程中, <istream>會被include 3次
https://www.modernescpp.com/images/blog/Cpp20/Cpp20Modules/helloWorld2.png
但他說如果是Module(import)那就只會import 1次
(奇怪 我還以為 #ifndef #endif 就是為了要避免這種事情發生)
照這文章的說法是這樣compilation time可以減少
另外一個好處是 Module 容易避免撞到同樣的 symbols。
像這下面這種情況,你include 的順序會影響 RED 的數值
// webcolors.h
#define RED 0xFF0000
// productinfo.h
#define RED 0
--
Hololive情人節特別錄音組合! (販售至台灣時間 2021-04-12 22:59)
集中包含角巻わため、宝鐘マリン等27位Hololive VTuber的特別錄音
https://pbs.twimg.com/media/EuBfveQVEAEbmnY.jpg (圖片詐欺 沒露西亞語音包)
--
教授: C/C++助教就是你了。
這是語言定義問題還是Compiler的問題!?
都沒有問題啊 有誰有問題嗎?
我不知道 反正compiler小精靈幫我做了
#ifndef 都變成常識了,C++20才想到要處理= =
所以是在說原本C的head file沒做這些處理ㄇ
沒啊 誰規定要做這些處理,不處理有不處理的玩法啊
我也以為 header guards preprocessor variable 就會擋
耶,不是。header guard 有檔阿,三個檔案預處理完大小
差不多阿。
三個檔案預處理完差不多就是因為 include <iostream> 三次吧?
我的意思是說 會造成 include 三次 是語言如此定義
還是Compiler沒有去處理?
看起來是...compiler 就被教導要這樣幹?
hello.cpp 和 world.cpp 各 include iostream 一次
helloworld.cpp include iostream 三次,但他們大家相當
所以代表 preprocessor 在預處理 helloworld.cpp 時,
header guard 有起到作用吧?! *大小相當
從那文章看起來,preprocessing 做的是 text substitution 那本來大小 100 的東西會變成 659471,多出來的文字應該是來自 <iostream>
重覆symbols會被同事打死
樓上 有人用人家庫 不小心就撞到些常用名 像PACKET_SIZE
我看 C++ primer 上有建議,symbol 最好訂在 class 中,
第三方在GLOBAL或define很少用這麼短的吧...
讓 class scope 隔開,避免衝突。
Java 直接強迫你只能這麼做 XD
C++離我有點遠...(遠目)
這邊講的第三方是指在網路上黏貼人家代碼
其實C/C++都有方法解決這問題 只是一直沒放到內建
那被打死不是應該嗎?XDDDD
現在 continuous integration下,通常會有很多unit tests 你隨便亂define symbol會造成影響的話,merge前應該就會被發現了
我也不知道 iostream 多大 (汗..),但肯定不小吧!
define a const value要換成vonst expr才是現代用法
istream 和 ostream 這兩個 class 不知道包了多少神奇多
載運算子功能在裡面。
module的好處有需要說明嗎 什麼樣的人會覺得基於文本
的onclude沒問題
看不懂耶:)
44
首Po如題 就是我啦! 最近無聊去看C++20的新特性 靠北呀 #include感覺要被淘汰惹10
C++14之後就開始朝著潮系語言發展了 像C 那種古板的用法已經沒辦法吸引到入門的人來學 所以C++每一個新版 就會有很多語法糖 包裝的越易用 入門的人越多 才不會導致新人都被python搶走8
覺得這無甚意思 理論上語文定義不需要去管到庫連結問題 現在要把頭與庫綁在一起 讓人家好調用.. 是啦 谷歌安卓Java來講 比起VS或Makefile 初學幾無設置障礙 但用久了 還不是要自己設東設西 工程上來說 庫設置問題是一定跑不掉的17
一個已經不是八卦的八卦, 來看看核心之父 Linus Torvalds 是怎麼噴 C++ 的。 C++11、C++17、C++20..肥宅我到底要學幾次 C++ 啊? 沒有一次從頭到尾學透的。嗚嗚嗚...3
C++20 加了module幹掉愚蠢的基於文本引用 加了range幹掉愚蠢的 begin() end() 加了concept想幹掉魔咒般的模板編譯錯誤 這些東西改改
爆
Re: [問卦] 志祺說政府擋疫苗是假訊息爆
[問卦] 志祺說政府擋疫苗是假訊息爆
[問卦] 可以幫忙回憶一下 當初真的有擋疫苗嗎爆
[問卦] 欸不是 颱風如果在這停三天 南部怎麼辦爆
[問卦] 明天北部是不是沒颱風假了?74
[問卦] 南部這樣真的不算亂放假嗎?91
[問卦] 遙控颱風這麼尷尬的梗是怎開始流行的91
[問卦] 好奇問一下 志祺七七以前有這麼不中立嗎96
[問卦] 有沒有颱風一直在原地不走的卦90
[問卦] 猜猜颱風登陸時間與地點前五位200p86
[問卦] 曹操內姓將領最強是曹仁?75
[問卦] 北部明天上班上課大家會崩潰嗎82
Re: [問卦] 可以幫忙回憶一下 當初真的有擋疫苗嗎58
[問卦] 颱風近似滯留 在等什麼?55
[爆卦] 吳慷仁祝賀祖國生日被炎上55
[問卦] 明天全台穩了吧?49
[問卦] 石破茂要求美國在關島建立日本軍事基地43
[問卦]中共真的覺得台灣人會自願統一?38
Re: [新聞] 快訊/北檢預計第5度提訊…柯文哲「不願爆
[問卦] 社會安全網好像越補越大洞 是我的錯覺嗎89
[問卦] 拖行警察 只是過失致死吧?74
Re: [新聞] 高雄路邊「排水孔蓋長出樹」 颱風前夕民36
[閒聊] 還有人知道中島美嘉嗎?36
[問卦] 台北跟新竹明天放假機率多少27
[問卦] 驚!打房政策生效!11000間房降價出售45
[問卦] 山陀兒是第一個從台灣屁股鑽上來的颱風?21
Re: [新聞] 快訊/北檢預計第5度提訊…柯文哲「不願29
[問卦] 這個颱風真的會讓高雄很慘嗎?25
[問卦] 國運484前八年都敗光光了?84
[問卦] 史上第一個從高雄登陸的強烈颱風?