簡體   English   中英

"c++14 std::experimental::filesystem::v1 和 c++17 std::filesystem 之間的區別?"

[英]Differences between c++14 std::experimental::filesystem::v1 and c++17 std::filesystem?

我找到了這個頁面,描述了 c++14 和 c++17 之間的變化:

https:\/\/isocpp.org\/files\/papers\/p0636r0.html<\/a>

...它鏈接到此頁面,該頁面描述了建議的文件系統更改:

http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2016\/p0218r0.html<\/a>

我瀏覽了一下。 標准有一些小的措辭更改,但我看到的唯一代碼更改是命名空間更改,刪除了“實驗”和“v1”部分,因此“std::experimental::filesystem::v1”變成了“std::filesystem ",這是意料之中的。

據我所知,除了命名空間路徑沒有任何變化。 有誰知道是否還有其他變化?

換句話說,我正在使用帶有 -std=c++14 的 gcc。 我現在可以使用 std::experimental::filesystem 編寫代碼,並且將來只需更改此命名空間即可輕松切換到 -std=c++17 嗎?

我能找到的最接近重復的問題:

Boost 文件系統和標准 C++ 文件系統庫有多相似?<\/a>

現代 C++ 的實驗特性對於長期項目是否可靠?<\/a>

對文件系統庫進行更改的主要論文是

  • P0219R1 ,添加相對路徑支持
  • P0317R1 ,將緩存添加到directory_entry
  • P0492R2 ,一個冗長的修復和更改列表,以回應國家機構的評論
  • P0430R2 ,支持某些非POSIX系統

還有一些相對較小的修復和更改可以在LWG問題列表中找到 查找“C ++ 17”狀態的問題。 請注意,其中一些更改將被上面列出的文件取代。


對於現有的Filesystem TS代碼,我希望P0492R2是最重要的,因為剩下的論文主要是功能增加而不是更改。 P0492R2包括技術說明和重要的語義變化。 后一類中的一些立即浮現在腦海中的是:

  • path(".profile").stem()現在是".profile"
  • 如果rhs是絕對路徑或具有根名稱,則operator/ on path的語義會發生顯着變化。 path("/foo") / "/bar"現在是"/bar"而不是"/foo/bar" ; Windows上的path("C:\\\\x") / "D:y"現在是"D:y"
  • 舊的absolute消失了。 system_complete已重命名為absolute
  • permissions的簽名發生了微小的變化。

延遲回復,但是當我自己尋找同一問題的答案時,我遇到了這個問題。 當我終於弄清楚事情時,我想我會在這里發表我的觀察。

std::experimental::filesystem遷移到std::filesystem時,我遇到了以下更改:

# c++14 std::experimental::filesystem c++17 std::filesystem
1 canonical()具有接受基本路徑的重載,可用於解析第一個參數中傳遞的路徑 canonical()沒有這個重載,這破壞了我的一些代碼
2 canonical()不檢查路徑是否存在 canonical()確實檢查路徑是否存在,因此如果在調用此函數時遇到路徑可能不存在的情況,請切換到std::filesystem::weakly_canonical
3 插入運算符 ( << ) 為您提供不帶引號和未轉義的字符串。 例如C:\\my\\file.txt 插入運算符 ( << ) 在完整路徑周圍添加引號並轉義反斜杠 ( \\ )。 例如"C:\\\\my\\\\file.txt"這打破了我的一些測試,我不得不調用路徑對象的string (或wstring )方法來獲取未加引號和未轉義的字符串。
4 file_time_typestd::chrono::system_clock::time_pointtypedef file_time_typestd::chrono::time_point<filesystem::_File_time_clock>的別名。 這導致了我的代碼中某些地方的編譯錯誤,我期望它是system_clock::time_point

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM