比方说,我在"foo.hpp"中有以下内容.我有一个函数具有相同名称的结构.
int foo(int i);
struct foo{
foo(int i){ value = i;}
operator int() {return value;}
int value;
};
Run Code Online (Sandbox Code Playgroud)
如果我这样称呼它为主:
int main()
{
std::cout << foo(1) << std::endl; // function is called, not the struct, why??
}
Run Code Online (Sandbox Code Playgroud)
为什么编译器总是链接函数而不是结构?如果可能,如何更改结构链接,而不是函数?
最后,我想通过添加额外的头文件并用struct覆盖函数来覆盖库中的函数.这样,我希望更改一个特定的功能,但继续使用所有其他库函数,而不是同时更改库代码.
101*_*010 11
根据C++标准N4431§3.3.10 / 2名称隐藏[basic.scope.hiding](强调我的):
类名(9.1)或枚举名(7.2)可以通过在同一范围内声明的变量,数据成员, 函数或枚举器的名称隐藏.如果类或枚举名称和变量,数据成员,函数或枚举器在同一作用域(按任何顺序)中声明具有相同名称,则类或枚举名称将隐藏在变量,数据成员,函数或枚举器名称可见.
无论是放置struct foo或功能foo在它自己的namespace.