gpt4 book ai didi

c++ - isalnum 的范围解析运算符

转载 作者:搜寻专家 更新时间:2023-10-31 01:38:32 24 4
gpt4 key购买 nike

我问这个是对 this 的跟进问题。上一个问题几乎是三年前问的,所以我虽然问一个新的问题会更好。

我链接到的那个问题的症结在于 OP 试图运行以下代码行:

find_if(s.begin(), s.end(), isalnum);

在一些容器 s 上。这行代码编译失败,OP 应该这样做

find_if(s.begin(), s.end(), ::isalnum);

接受的答案指出 localecctype 库中有 isalnum 函数,并且编译器在消除两者之间的歧义时遇到问题,因此 :: 范围解析运算符。我通过仅包含其中一个库对其进行了测试,但编译器仍然存在消除歧义的问题。这是为什么?如果我只包含其中一个库,那么显然编译器不应该“知道”另一个库,那么为什么会发生冲突?

我的问题的第二部分是,:: 运算符如何告诉我们需要哪个 isalnum 函数?

谢谢

编辑

我知道 :: 运算符告诉我们我们想要的函数/变量在全局范围内,但这仍然没有回答我的第二个问题。

最佳答案

isalnum来自 <locale>在命名空间 std 中定义. isalnum来自 <cctype>在命名空间 std 中定义 全局,因为 C 库中的符号(可能 [1])在全局范围内可用。使用 ::isalnum请求 isalnum 的版本来自全局范围,而不是来自 namespace std .

[1]。该标准保证,如果您包含 <ctype.h>那么这些符号将在全局范围内。对于 C 库头文件,cc* 几乎总是这样。版本也是如此,尽管严格来说它是实现定义的。

关于c++ - isalnum 的范围解析运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32696591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com