比方说,我在“foo.hpp”中有以下内容。我有一个与结构同名的函数。

int foo(int i);

struct foo{
 foo(int i){ value = i;}
 operator int() {return value;}
 int value;
};

如果我像这样在 main 中调用它:
int main()
{
 std::cout << foo(1) << std::endl; // function is called, not the struct, why??
}

为什么编译器总是链接函数而不是结构?如果可能,如何更改结构是链接的,而不是函数?

最终,我想通过添加额外的头文件并用结构覆盖函数来覆盖库中的函数。这样,我希望更改一个特定函数,但继续使用所有其他库函数,而不是同时更改库代码。

最佳答案

理由

根据 C++ 标准 N4431 § 3.3.10/2 名称隐藏 [basic.scope.hiding] ( 强调我的 ):

类名 (9.1) 或枚举名 (7.2) 可以通过 变量、数据成员、
函数、 或枚举器 在同一范围内声明。如果一个类 或枚举名称和一个变量、数据
成员、函数或枚举器在同一个范围内(以任何顺序)以相同的名称被 声明,
类或枚举名称 隐藏在 变量、数据成员、 函数、 或枚举器 名称所在的任何位置
可见的。


解决方案

struct foo 或函数 foo 放在其自己的 namespace 中。

关于c++ - 使用结构重新定义 C++ 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30824647/

10-11 20:38
查看更多