为什么regex_search不需要名称空间

我试图理解为什么下面的代码在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 ::。为什么允许这样做?

bames53

该代码由于参数依赖查找而得以编译由于参数是std名称空间的类型,因此将该名称空间标记为“关联名称空间”,并且名称解析考虑该名称空间中的候选项。

会导致boost和std名称空间之间出现问题吗?

可能会造成歧义,从而导致错误。

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有关,则必须提供详细信息以获得更具体的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么某些Boost函数不需要以名称空间作为前缀

来自分类Dev

为什么putchar不需要标题?

来自分类Dev

为什么我不需要使用命名空间?

来自分类Dev

为什么我不需要使用命名空间?

来自分类Dev

Oracle XMLQuery插入不需要的名称空间

来自分类Dev

为什么Angular不需要在名称中使用破折号

来自分类Dev

为什么在首次使用后不需要初始化变量“名称” [Javascript]

来自分类Dev

为什么Angular不需要在名称中使用破折号

来自分类Dev

Proguard - 为什么不需要保留 Parcelable CREATOR 的 createFromParcel 名称

来自分类Dev

需要删除不需要的空间元素

来自分类Dev

为什么Stripe的webhook不需要验证签名?

来自分类Dev

为什么我的IntentService不需要WakeLock?

来自分类Dev

Logrotate:“日志不需要旋转”为什么?

来自分类Dev

为什么for循环不需要可变的迭代器?

来自分类Dev

为什么不需要显式设置通用参数?

来自分类Dev

为什么注释lambda类型不需要-XScopedTypeVariables?

来自分类Dev

如何确定为什么不需要MarshalByRefObject

来自分类Dev

为什么Redshift不需要物化视图或索引?

来自分类Dev

为什么Eunit不需要导出测试功能?

来自分类Dev

为什么要映射的参数之间不需要逗号?

来自分类Dev

为什么compareSync不需要盐字符串?

来自分类Dev

为什么std模板功能不需要限定?

来自分类Dev

为什么SendGrid不需要DNS修改

来自分类Dev

与PostgreSQL相比,为什么Mysql不需要真空?

来自分类Dev

为什么此查询返回不需要的行

来自分类Dev

为什么运行python文件不需要执行权限?

来自分类Dev

为什么可变对象不需要双指针?

来自分类Dev

为什么MATLAB的置换不需要额外的内存?

来自分类Dev

为什么f =(+)不需要类型注释?

Related 相关文章

  1. 1

    为什么某些Boost函数不需要以名称空间作为前缀

  2. 2

    为什么putchar不需要标题?

  3. 3

    为什么我不需要使用命名空间?

  4. 4

    为什么我不需要使用命名空间?

  5. 5

    Oracle XMLQuery插入不需要的名称空间

  6. 6

    为什么Angular不需要在名称中使用破折号

  7. 7

    为什么在首次使用后不需要初始化变量“名称” [Javascript]

  8. 8

    为什么Angular不需要在名称中使用破折号

  9. 9

    Proguard - 为什么不需要保留 Parcelable CREATOR 的 createFromParcel 名称

  10. 10

    需要删除不需要的空间元素

  11. 11

    为什么Stripe的webhook不需要验证签名?

  12. 12

    为什么我的IntentService不需要WakeLock?

  13. 13

    Logrotate:“日志不需要旋转”为什么?

  14. 14

    为什么for循环不需要可变的迭代器?

  15. 15

    为什么不需要显式设置通用参数?

  16. 16

    为什么注释lambda类型不需要-XScopedTypeVariables?

  17. 17

    如何确定为什么不需要MarshalByRefObject

  18. 18

    为什么Redshift不需要物化视图或索引?

  19. 19

    为什么Eunit不需要导出测试功能?

  20. 20

    为什么要映射的参数之间不需要逗号?

  21. 21

    为什么compareSync不需要盐字符串?

  22. 22

    为什么std模板功能不需要限定?

  23. 23

    为什么SendGrid不需要DNS修改

  24. 24

    与PostgreSQL相比,为什么Mysql不需要真空?

  25. 25

    为什么此查询返回不需要的行

  26. 26

    为什么运行python文件不需要执行权限?

  27. 27

    为什么可变对象不需要双指针?

  28. 28

    为什么MATLAB的置换不需要额外的内存?

  29. 29

    为什么f =(+)不需要类型注释?

热门标签

归档