gpt4 book ai didi

c++ - 为什么枚举不能用作此 vector 构造函数中的参数?

转载 作者:IT老高 更新时间:2023-10-28 22:35:16 24 4
gpt4 key购买 nike

这段代码片段:

enum {N = 10, M = 100};

vector<int> v(N, M);

由于以下错误,无法使用 Visual Studio 2013 进行编译:

error C2838: 'iterator_category' : illegal qualified name in member declaration

这有什么问题?

最佳答案

这是 VS2012 和 VS2013 中的一个错误,因为它不符合 C++11 标准(_HAS_CPP0X 定义为 1):

C++03 23.1.1 [lib.sequence.reqmts]/9 说:

For every sequence defined in this clause and in clause 21:

— the constructor template <class InputIterator> X(InputIterator f, InputIterator l, const Allocator& a = Allocator()) shall have the same effect as:

X(static_cast<typename X::size_type>(f), static_cast<typename X::value_type>(l), a) if InputIterator is an integral type.

但来自 C++11 23.2.3 [sequence.reqmts]/14:

For every sequence container defined in this Clause and in Clause 21:

— If the constructor template <class InputIterator> X(InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type()) is called with a type InputIterator that does not qualify as an input iterator, then the constructor shall not participate in overload resolution.

根本不应该考虑那个构造函数

更多信息:https://stackoverflow.com/a/12432482/1938163

作为一种解决方法,您可以“帮助解决重载问题”,例如

std::vector<int> v(static_cast<std::vector<int>::size_type>(N), M);

关于c++ - 为什么枚举不能用作此 vector 构造函数中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25918446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com