gpt4 book ai didi

c++ - 为什么 regex_search 不需要命名空间

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

我试图理解为什么下面的代码在 VS2012 和 GCC 4.8.3 中编译没有问题:

#include <iostream>
#include <regex>

int main(int argc, char** argv)
{
std::wregex brackets_regex(L"");
std::wcmatch bracket_match;

wchar_t expr[80] = L"";

regex_search(expr, bracket_match, brackets_regex);
}

据我所知,regex_search 是命名空间 std 的一部分,但两个编译器都不需要 std::。为什么允许这样做?

最佳答案

该代码编译是因为 Argument Dependent Lookup .由于参数是来自 std 命名空间的类型,因此该命名空间被标记为“关联的命名空间”,并且名称解析考虑来自该命名空间的候选者。

could that cause problems between boost and std namespaces?

它可能会产生歧义,从而导致错误。

namespace A {
struct AA {};
}

namespace B {
struct BB {};
void foo(A::AA, BB) {}
}

namespace A {
void foo(AA, B::BB) {}
}

int main()
{
A::AA a;
B::BB b;
foo(a, b);
}

此外,我认为某些编译器可能会错误地实现它,尤其是与两阶段查找结合使用时,会导致编译格式错误的代码或无法编译正确的代码,甚至将名称解析为错误的实体。

如果您遇到您认为可能与 ADL 相关的问题,您必须提供详细信息以获得更具体的答案。

关于c++ - 为什么 regex_search 不需要命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25145285/

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