В C ++ 11 теперь мы можем создавать объекты на лету в аргументах функции.
Например, мы можем вставить новую пару в std :: map следующим образом:
typedef std::map<char, int> MapType;
MapType my_map;
my_map.insert({'f', 6}); //less verbose than make_pair
Это также работает для std :: vector.Однако для std :: array это странно не работает.
Пример:
#include <iostream>
#include <array>
#include <vector>
using namespace std;
void arr_on_fly(std::array<int, 4> arr)
{
/*...*/
}
void vec_on_fly(std::vector<int> vec)
{
/*...*/
}
int main()
{
vec_on_fly({1, 2, 3, 4});
arr_on_fly({1, 2, 3, 4});
}
Ссылка: http://ideone.com/gvIUF
Почему это не работает?Является ли это недостатком в стандарте C ++ 11?
Ошибка «не удалось преобразовать« {1, 2, 3, 4} »в« std :: array »» кажется абсурдной, поскольку мы можем инициализироватьstd :: array примерно так:
std::array<int, 4u> arr = {1, 2, 3, 4};