c++ - 参数相关名称查找和 typedef

标签 c++

我没想到这段代码可以编译,但它确实编译了。我的理解是 func(d) 它在全局命名空间中查找名为“func”的函数,但也在任何传入参数的命名空间中查找(依赖于参数的查找)

但在这种情况下,参数位于全局命名空间中。那么为什么它会在 ns 命名空间中找到“func”呢?是否有特殊规则规定,如果参数类型是 typedef,则它使用基础类型的命名空间而不是实际参数的命名空间?

这似乎是真的,但我找不到任何支持这一点的东西……这是预期的行为吗?

namespace ns
{
    struct data {};
    void func(ns::data item) {}
};

// Create an alias "datatype" in the global namespace for ns::data
typedef ns::data datatype;


int main()
{
    datatype d;
    func(d);
}

最佳答案

参数dmain 的本地参数。 datatype 只是类型 ns::data 的别名,因此 d 的类型为 ns::data

ns::datans 命名空间的 [直接] 成员,因此 ns 命名空间中的此函数将被考虑用于 ADL .

关于c++ - 参数相关名称查找和 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13192947/

相关文章:

c++ - 在矩形qt中生成随机坐标

c++ - 防御用户脚本的堆栈溢出

c++ - 带有获取/设置方法的封装设计味道

c++ - 如何在 C++ 中检索外部主机的 MAC 地址

c++ - 标准 C++14 中零大小数组的解决方法?

c++ - 调整外部 vector 的大小会复制内部 vector 吗?

c++ - 关于libmemcached使用的问题

c++ - 复杂表达式中的位移位问题

c++ - 使用 Windows API 获取键盘输入的更好方法?

c++ - gcc 的 boost::variant 链接器错误