簡體   English   中英

std::ranges::swap() 和 std::swap() 有什么區別?

[英]What's the difference between std::ranges::swap() and std::swap()?

在 C++20 中,有兩個swap函數模板: std::ranges::swap(T&&, U&&)std::swap(T&, T&)

我只是好奇:

他們兩個有什么區別?

std::swap有問題。 可能有一個更高效的交換函數不在std命名空間中。 如果可用,您應該啟用 ADL 以查找和使用它,否則使用std::swap 它被稱為“標准 2 步”:

using std::swap;
swap(a, b);

但是std::ranges::swap沒有這個問題,並且會調用 ADL 會調用的版本:

std::ranges::swap(a, b);

是一個演示。

粗略地說: std::ranges::swap概括了std::swap

  • 如果TU相同,則相當於調用std::swap
  • 否則它會將參數交換為兩個范圍 - 如果它們是范圍。
  • 否則,它將執行類似交換的過程,並在不同類型 T 和 U 之間進行移動分配。
  • 如果連這都不能發生,它將無法編譯。

有關詳細信息,請參閱cppreference 頁面

我必須說我發現這個函數有點令人困惑和巴洛克式的,但是 - 也許對范圍庫更有經驗的人會產生一種直覺,為什么它是有意義的。

暫無
暫無

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

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