当我取消引用容器的迭代器时(例如 *v.begin()
),我总是得到对包含类型的引用。然后,我无法使用 decltype
来初始化另一个容器。
int main()
{
vector<int> a;
vector<decltype(*a.begin())> b;
return 0;
}
我该如何解决?
最佳答案
选择 1:
声明b
的最简单方法是使用decltype(a)
作为容器类型。
decltype(a) b;
选择 2:
声明 b
的下一个间接级别是使用 decltype(a)::value_type
作为包含的类型。
std::vector<decltype(a)::value_type> b;
选择 3:
声明 b
最迂回的方法是使用 std::remove_reference
从取消引用的迭代器中移除引用。
std::vector<std::remove_reference<decltype(*a.begin())>::type> b;
关于c++ - 使用 decltype 初始化容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42263620/