我问这个作为这个问题的后续行动。上一个问题是大约三年前提出的,所以我认为问一个新问题会更好。
我链接到的那个问题的症结在于 OP 试图运行以下代码行:
find_if(s.begin(), s.end(), isalnum);
在某个容器上s
。该行代码编译失败,OP应该这样做
find_if(s.begin(), s.end(), ::isalnum);
接受的答案指出,locale
andcctype
库中有 isalnum 函数,并且编译器在消除两者之间的歧义时遇到了麻烦,因此使用了::
范围解析运算符。我通过仅包含其中一个库对其进行了测试,但编译器仍然存在消除歧义的问题。这是为什么?如果我只包含其中一个库,那么显然编译器不应该“知道”另一个库,那么为什么会发生冲突呢?
我的问题的第二部分是,::
操作员如何告诉我们isalnum
我们想要哪个功能?
谢谢
编辑
我知道::
运算符告诉我们我们想要的函数/变量在全局范围内,但这仍然不能回答我的第二个问题。