[英]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&&
聲明c
和d
,但沒有一種方法有效。 有沒有辦法實現上述期望的行為?
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.