比方说,我在“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/