2014-10-25 5 views
0

Является ли следующий кодИнициализация вектор векторов

vector<vector<int> > v(3,5); 

правовой C++ 98? Является ли это законным C++ 11?

Он компилируется с MSVS 2010 и дает вектор размера 3, каждый из которых является вектором размера 5. Он не может скомпилироваться с MSVS 2013 и MSVS «14».

+1

Неправомерный, поскольку 'std :: vector' имеет [явный конструктор] (http://en.cppreference.com/w/cpp/container/vector/vector), берущий размер. – 0x499602D2

+0

Я считаю, что это была ошибка в stdlib VS2010, которая вызвала конструктор 'vector', в котором были задействованы два итератора. Этот конструктор не должен участвовать в разрешении перегрузки, когда два аргумента являются целыми типами. – Praetorian

ответ

4

Конструктор размеров с одним аргументом std::vector является явным, поэтому 5 не будет работать, так как он неявно конвертируется в std::vector<int>. Вам нужно это:

std::vector< std::vector<int> > v(3, std::vector<int>(5)); 

Это всегда было в случае с C++ 98 и не изменился с тех пор (хотя фактические подписи конструктора изменились относительно аргументов по умолчанию, см cppreference entry для истории подписей) ,

Смежные вопросы