std :: vector,为什么初始化列表在C ++ / CLI中不起作用

时间:2016-05-10 13:50:53

标签: .net visual-c++ vector c++-cli initializer-list

三个简单的陈述,一个不编译。

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>>'

它适用于charlongint等,但不适用于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编译器

1 个答案:

答案 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 } );