22得票1回答
返回一个2元组是否比std::pair不高效?

考虑以下代码:#include <utility> #include <tuple> std::pair<int, int> f1() { return std::make_pair(0x111, 0x222); } std::tuple<...

21得票4回答
元组/解构的返回值优化

我正在研究元组/绑定返回值优化,但我观察到的行为与我预期的不同。在下面的示例中,我希望运用移动语义,事实上它的确发挥了作用,但仍存在一次复制操作。以下是优化后的输出:Test duo output, non_reference tuple Default constructor invoked...

18得票3回答
ISO C++标准中std::tuple的默认构造函数描述让人困惑

标准指出std::tuple具有以下成员函数。constexpr tuple(); explicit tuple(const Types&...); 能否有人解释一下 std::tuple<> 应该发生什么?

18得票2回答
std::tuple的实现是否允许在空类元素时触发派生到基类转换而失败?

这段代码在GCC4.7上无法编译struct A {}; void f(A); struct B { B(std::tuple<A>); }; void f(B); int main() { f(std::make_tuple(A())); } 由于 GCC 源于 A,以利...

17得票4回答
让`std::get`与SFINAE协同工作

std::get 似乎不支持 SFINAE,如下测试用例所示: template <class T, class C> auto foo(C &c) -> decltype(std::get<T>(c)) { return std::get&lt...

17得票1回答
为什么在这种情况下我需要指定默认构造对象的类型?

我不明白为什么在下面的foobar中我需要指定std::vector<int>{},而在foobar2中却不需要。 #include <iostream> #include <memory> #include <vector> #include...

16得票3回答
为什么要显式移动一个转发引用?

我正在查看一些代码,看到以下函数: template <typename... Args> static return_t make_return(Args &&... args) { // using std::forward<Args> w...

16得票2回答
一个元组是否保证压缩空元素?

在libstdc++和libc++中,std::tuple的实现使用了(我认为是)空基类优化来压缩空元素: struct empty {}; static_assert(sizeof(std::tuple<int, empty>) == sizeof(int), ""); //...

15得票6回答
通过模板参数给定长度,在编译时生成相同类型的std::tuple

在C++中,如何实现一个带有整数模板参数的函数来指定元组长度,并生成具有该长度的std::tuple? 例如:func<2>() returns std::tuple<int, int>(); func<5>() returns std::tuple&lt...

15得票2回答
通过公共成员函数对于不是结构体或元组的自定义类型进行结构化绑定。

我正在学习Herb Sutter的 A journey: Toward more powerful and simpler C++ programming 文章中的结构绑定部分。 为了理解这个概念,最好写一个程序。然而我尝试了一下,却遇到了一些错误。 我只是想试试如何在具有私有...