【发布时间】:2018-09-12 00:50:22
【问题描述】:
我看到std::string_view 和std::string 都具有对称的operator==(),对于std::string,它具有接受std::string_view 的构造函数和将自身转换为std::string_view 的运算符。那么当我们尝试使用operator==()比较std::string_view和std::string时,它应该是模棱两可的吗?
我想我的想法一定有问题。谁能澄清一下?
例子:
std::string s1 = "123";
std::string_view s2 = "123";
// in the following comparison, will s1 use the convert operator to generate a string_view, or will s2 use string's string_view constructor to generate a string?
if (s1 == s2) {...}
【问题讨论】:
-
你能提供一个模棱两可的代码示例吗?
-
-
@LightnessRacesinOrbit:这有关系吗?他们都做同样的事情,所以这被称为本质上是诡辩。而且即使我们要进行诡辩,这也取决于参数的顺序,因此没有实际示例无法回答问题。
-
@NicolBolas 好吧,这不是诡辩,因为如果两个函数完全匹配某个调用,编译器会因模棱两可而出错。它不会先检查它们的语义等价性,然后让你侥幸逃脱。
-
@NicolBolas 当然它可以使用一些澄清和扩展,但我的意思是从根本上说,我不认为这是一个毫无意义或空洞的问题,正如你所暗示的那样?
标签: c++ c++17 string-view