c++ - 有没有办法将 std::array 与文字或初始值设定项列表一起用于比较,就像赋值一样?

标签 c++ arrays c++11 std

<分区>

例子:

std::array<float, 3> vec;

我们可以...

vec = {1.1, 1.2, 1.3};

为什么我们不能也做以下比较?

vec == {1.1, 1.2, 1.3}

相反,看来我们必须做...

vec == std::array<float, 3>({1.1, 1.2, 1.3})

...或类似的东西。

Typedef'ing 允许我做类似...

typedef std::array<float, 3> vector;
vec == vector({1.1, 1.2, 1.3})

但是有没有办法只做...?

vec == {1.1, 1.2, 1.3}

我可以重载 operator== 来完成这个吗?编译器似乎应该知道将 {1.1, 1.2, 1.3} 解释为 == 左侧的任何内容。它为 = 做这件事。为什么不是 ==

最佳答案

没有别名,可以使用decltype来转换列表

vec == decltype(vec){{1.1, 1.2, 1.3}};

您可以显式调用operator==,但不能使用比较运算符隐式转换列表。

operator==(vec, {{1.1, 1.2, 1.3}});

我能想到的唯一其他选择是 std::equal_to 但这更丑陋:

std::equal_to<decltype(vec)>{}(vec, {{1.1, 1.2, 1.3}});

This answer引用标准说明 initializer_list 可以 的用途,运算符不在该列表中。

关于c++ - 有没有办法将 std::array 与文字或初始值设定项列表一起用于比较,就像赋值一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36457740/

相关文章:

c++ - C++11 核心语言是否处理 Singleton Dead Reference?

java - 从字符串中获取不同的值并将它们转换为 double 值

c++ - 我无法在类中添加除 bool 运算符之外的两个或更多参数

c++ - 未调用 move 构造函数

c++ - 将 CreateDIBSection BMP 数据写入文件

c++ - 摆脱无限循环中的生成窗口

c# - 将 vector/数组从非托管 C++ 传递到 C#

java - 在 JAVA 中删除字符串中的重复项。不允许使用额外的数据结构

python - 随机访问磁盘上保存的 numpy 数组

c++ - 为什么通过地址传递大括号初始化的临时变量需要显式转换为 MSVS 中的相同类型