Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有一种方法可以使用std::array与文本或初始值设定项列表进行比较,与赋值相同?_C++_Arrays_C++11_Std - Fatal编程技术网

C++ 有没有一种方法可以使用std::array与文本或初始值设定项列表进行比较,与赋值相同?

C++ 有没有一种方法可以使用std::array与文本或初始值设定项列表进行比较,与赋值相同?,c++,arrays,c++11,std,C++,Arrays,C++11,Std,例如: std::array<float, 3> vec; 为什么我们不能也做下面的比较呢 vec == {1.1, 1.2, 1.3} 相反,我们似乎不得不做 vec == std::array<float, 3>({1.1, 1.2, 1.3}) 我是否可以通过重载操作符==来完成此操作?似乎编译器应该知道将{1.1,1.2,1.3}解释为=左侧的内容。它为=执行此操作。为什么不使用=?如果没有别名,可以使用decltype转换列表 vec == decltyp

例如:

std::array<float, 3> vec;
为什么我们不能也做下面的比较呢

vec == {1.1, 1.2, 1.3}
相反,我们似乎不得不做

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

我是否可以通过重载
操作符==
来完成此操作?似乎编译器应该知道将
{1.1,1.2,1.3}
解释为
=
左侧的内容。它为
=
执行此操作。为什么不使用
=

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

vec == decltype(vec){{1.1, 1.2, 1.3}};
可以显式调用
运算符==
,但不能使用比较运算符隐式转换列表

operator==(vec, {{1.1, 1.2, 1.3}});
我能想到的唯一其他选择是
std::equal_to
,但那更难看:

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

引用标准,其中说明了初始值设定项列表可以用于什么,运算符不在该列表中。

是的,但问题是“为什么我们不能同时执行以下操作…”。为什么,真的?
vec={1,2,3}
vec={1,2,3}
之间的根本区别是什么?事实上,
=
是隐式声明的,
=
是用户声明的?在任何情况下,一个特殊的
cmp
函数委托给
std::equal(v.begin(),v.end(),il.begin(),il.end())
将是最好的,因为它避免了复制。好的,因此,链接的副本回答了我的问题:语言规范明确地对赋值运算符进行了特殊处理。下面是另一个相关问题:此处选择的答案满足了我的问题,尽管答案缺乏文件支持:文件支持似乎存在于此答案中:
vec == decltype(vec){{1.1, 1.2, 1.3}};
operator==(vec, {{1.1, 1.2, 1.3}});
std::equal_to<decltype(vec)>{}(vec, {{1.1, 1.2, 1.3}});