使用结构重新定义C++函数

Ben*_*Ben 3 c++ struct

比方说,我在"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.