C++ 11에서는 이제 함수 인수로 즉석에서 객체를 생성 할 수 있습니다.C++ 11 on the fly 공사 불일치
예를 들어, 우리는 표준에 새로운 쌍을 삽입 할 수 있습니다 : 맵과 같이 :이 또한 표준 : : 벡터 작동
typedef std::map<char, int> MapType;
MapType my_map;
my_map.insert({'f', 6}); //less verbose than make_pair
합니다. 그러나 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});
}
왜이 작동하지 않는 이유는 무엇입니까? 이것이 C++ 11 표준의 결함입니까?
std::array<int, 4u> arr = {1, 2, 3, 4};
당신도 알다시피, C++ 03은 함수 인자 *로 즉석에서 객체를 만들자. 다른 문법을 사용해야한다;) –
"* 우리는 std :: array를 다음과 같이 초기화 할 수있다 : 'std :: array arr = {1, 2, 3, 4};'* "그렇지만 __cannot__을 이렇게 구성하면 : std :: array arr {1, 2, 3, 4} - 대신 std :: array arr {{1, 2, 3, 4}};'가되어야합니다. 'arr_on_fly ({{1, 2, 3, 4}});'와 같은 컨텍스트에도 적용됩니다. –
ildjarn
ildjarn, 틀렸어. http://ideone.com/R3QUn을 참조하십시오. – Ricky65