c++ - 大括号封闭的初始化列表?转换为 vector

标签 c++ list vector

所以我有一段代码正在尝试测试。该代码正在检查一些 vector (这些是结构的元素)在某些点是否等同于已知 vector ,但是我遇到了一个问题。当我尝试按如下方式将 vector 与已知 vector 进行比较时,

assert((class1.getattr().getattr().getVec(key) == {4,3,2,2}))

我收到以下错误:

assertAll.cpp:105:82: error: could not convert ‘{4,3,2,2}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<int>’

其余的代码都是正确的,assert 的 lval 绝对是一个 vector ,它应该是。我正在使用 g++ 中的标志 -std=c++11 -Wall -Wextra -pedantic -O 进行编译。有人知道如何解决这个问题吗?有没有一种方法可以将括号内的初始值设定项列表强制转换为 vector ,或者是否有更好的方法来执行此操作?

最佳答案

Does anybody know how to fix this? Is there a way to typecast the bracket enclosed initializer list to a vector

有趣的是,当我尝试类似的东西时,我在 Clang 3.5 和 GCC 4.9.2 上得到了一个完全不同的错误,但是你可以只使用初始化列表语法就地构造一个 vector (我猜不是完全类型转换):

assert((class1.getattr().getattr().getVec(key) == std::vector<int>{4,3,2,2}))

我不确定如何在 Coliru 等上运行代码,但以下代码在 GCC 4.9.2 上对我有用 g++ -std=c++11 -Wall -迂腐的

#include <cassert>
#include <vector>

std::vector<int> foo() {
    return {1,2,3,4};
}

template<class T>
bool is_equal(const T& a, const T& b) {
    return a == b;
}

int main()
{
    assert((foo() == std::vector<int>{1,2,3,4}));

    assert(is_equal(foo(), {1,2,3,4}));

    assert([&](std::vector<int> v) -> bool {
        return foo() == v;
    }({1,2,3,4}));
}

诚然,头脑正常的人不会使用那样的 lambda,但正如您从示例中可以看出的那样,您基本上只需要告诉编译器两侧是同一类型即可获得它将初始化列表转换为 vector 。

关于c++ - 大括号封闭的初始化列表?转换为 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27327425/

相关文章:

python - 我想知道为什么这行得通

c++ - 如何返回 vector 对象?

c++ - 堆栈展开期间未调用两个析构函数之一

c++ - 清理 C/C++ 代码揭示可变参数宏的问题

python - 具有多项作业的列表理解

c++ - 为什么不能在 2D vector 中 push_back? C++

android - 需要根据 Sensor.TYPE_ORIENTATION 数据计算旋转矢量

c++ - FANN:使用从多个文件读取的数据训练 ANN 时发生内存泄漏

c++ - C++ 中奇怪的字符串运算符= 行为

perl - 如何按元素对两个列表求和