簡體   English   中英

關鍵字“for”后帶有省略號的 for 語句有什么作用?

[英]What does a for statement with an ellipsis after the keyword 'for' do?

我看過這段代碼

template <class... TYPES>
constexpr void tuple<TYPES...>::swap(tuple& other)
    noexcept((is_nothrow_swappable_v<TYPES> and ...))
{
    for...(constexpr size_t N : view::iota(size_t(0), sizeof...(TYPES))) {
        swap(get<N>(*this), get<N>(other));
    }
}

構造for...做什么?

截至 2021 年,這不是標准的 C++。

這是一個提議的語法(命名為“擴展語句”),用於可以描述為或多或少類似於if constexpr的循環:編譯時循環構造,在語法上展開。 與普通循環相比,它的優勢在於它允許迭代異構類型的結構。

這種語法將允許編寫如下循環:

std::tuple<int, const char *, double> t { 42, "hello", 69.420 };

for... (auto x : t) {
    std::cout << x << std::endl;
}

意思大致相同:

std::tuple<int, const char *, double> t { 42, "hello", 69.420 };

{
    auto x = std::get<0>(t);
    std::cout << x << std::endl;
}
{
    auto x = std::get<1>(t);
    std::cout << x << std::endl;
}
{
    auto x = std::get<2>(t);
    std::cout << x << std::endl;
}

在上面的for...循環中,在每次迭代中, x變量都有不同的類型; 可以說,每次迭代都有一個單獨的、獨立的變量。 在普通循環中,變量的類型在迭代之間是共享的,這意味着循環不能通過類型檢查。

這種語法最初是在P1306R0中提出的,它還描述了一個相關但不同for constexpr以下修訂將兩者統一起來)。 P1858R1 為其引入了另一種語法template for ,取代了省略號語法。

顯然預計此功能將包含在 C++23 中。

暫無
暫無

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

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