当我用 C 编写面向对象的代码时,我通常将结构定义与公共函数放在一个头文件中,并在单独的 .c 文件中实现公共函数。我将 static 关键字赋予这个类的所有“私有”函数,并在 .c 文件中实现它们。然后,公共函数可以调用属于同一类的私有函数。由于 static 关键字,不能从外部调用私有函数,因此 GCC 可以优化其中的许多函数。它们通常是内联的,并且原始函数会从输出目标文件中完全删除。
现在我的问题是:我怎样才能对 C++ 类做同样的事情?
假设我有一个头文件:
class A {
int private_field;
int private_function();
public:
int public_function();
};
还有我的 .cpp 文件:
#include <iostream>
#include "A.h"
int A::private_function() {
std::cin >> private_field;
return private_field;
}
int A::public_function() {
return private_function() + 4;
}
在生成的目标文件中,private_function 保留为单独的符号,并且 public_function 调用 private_function(未内联)。我想给 private_function 内部链接,所以编译器可以做与我使用 C 时相同的优化。我尝试过使用匿名命名空间和静态,但我无法让它像我想要的那样工作。如何正确地做到这一点,甚至可能吗?我使用 GCC。