【问题标题】:std::vector, why initializer list does not work in C++/CLIstd::vector,为什么初始化列表在 C++/CLI 中不起作用
【发布时间】:2016-05-10 13:50:53
【问题描述】:

三个简单的语句,一个不编译。

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 编译器

【问题讨论】:

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


【解决方案1】:

正确使用std::initializer-list的方法是

    std::vector<size_t>{};
    std::vector<size_t>{ 1 };
    std::vector<size_t>{ 1, 2 };

即。没有括号。有关示例,请参见 http://www.stroustrup.com/C++11FAQ.html#init-list

使用它应该可以解决您的问题。否则,在不得已的情况下,您可以强制输入如下:std::vector&lt;size_t&gt;( std::initializer-list&lt;size_t&gt;{ 1 } );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-22
    • 2012-01-29
    • 2022-06-10
    • 2021-03-19
    • 2021-10-26
    • 2020-05-14
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多