簡體   English   中英

在 C++ 中混合右值和左值的結構化綁定

[英]Structured bindings mixing rvalues and lvalues in C++

以下代碼段中的注釋行未按預期工作:

double a, b;
auto [c, d] = std::make_tuple<double, double&>([&]() -> double { return a; }(),
                                               [&]() -> double& { return b; }());
static_assert(std::is_same_v<real_t, decltype(c)>);
// static_assert(std::is_same_v<real_t&, decltype(d)>);    // Compile error!

具體來說,我想在單個結構化綁定聲明中同時返回右值和左值。 我曾嘗試使用auto&auto&&聲明cd ,但沒有一種方法有效。 有沒有辦法實現上述期望的行為?

std::make_tuple<double, double&>(...)返回std::tuple<double, double> ,因為它將std::decay應用於模板 arguments。 在任何情況下,您都不應該為其指定模板 arguments,它可以自動推導出它們。

要在元組中有引用,請使用std::tuple<double, double &>(...)構造它。 然后您的代碼將按您的預期工作。

暫無
暫無

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

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