You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无需std命名空间,holds_alternative仍可编译通过?

关于holds_alternative无需std::命名空间即可编译的现象

我在多款编译器上测试后发现,以下代码中的holds_alternative即使不添加std::命名空间限定,也能正常编译通过:

#include <variant>
int main()
{
    std::variant<int, double> foo = 1;
    bool wuff = holds_alternative<int>(foo);
    return 0;
}

出现这种情况的核心原因是**依赖于参数的查找(ADL,Argument-Dependent Lookup)**机制:当调用函数时,如果函数的实参属于某个命名空间(此处foo是std::variant类型,归属std命名空间),编译器会自动在该实参所属的命名空间中查找匹配的函数。holds_alternative是<variant>头文件中定义在std命名空间内的函数模板,因此编译器通过ADL可以自动定位到它,无需手动添加std::前缀。

内容的提问来源于stack exchange,提问作者AMG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:22:01