三个简单的陈述,一个不编译。
std::vector<size_t>({});
std::vector<size_t>({ 1 }); // This does not compile
std::vector<size_t>({ 1, 2 });
只有列表中包含一个元素的第二个语句才会出错:
cannot convert from 'initializer-list' to 'std::vector<size_t,std::allocator<char32_t>>'
它适用于char
,long
,int
等,但不适用于size_t
。有人知道为什么,也许有解决方法吗?
以下是完整的代码:
// ConsoleApplication1.cpp : main project file.
#include "stdafx.h"
#include <vector>
using namespace System;
int main(array<System::String ^> ^args)
{
std::vector<size_t>({});
std::vector<size_t>({ 1 });
std::vector<size_t>({ 1, 2 });
return 0;
}
我正在使用VS2013的C ++ / CLI编译器
答案 0 :(得分:1)
使用std :: initializer-list的正确方法是
std::vector<size_t>{};
std::vector<size_t>{ 1 };
std::vector<size_t>{ 1, 2 };
IE中。没有括号。有关示例,请参阅http://www.stroustrup.com/C++11FAQ.html#init-list。
使用它可以解决您的问题。否则,最后,你可以强制这样的类型:std::vector<size_t>( std::initializer-list<size_t>{ 1 } );