我正在研究一个项目并在一个大函数中清理代码,我认为它应该是一个单独的函数。但是这个单独的函数只会在更大的函数中使用一次。我该怎么对待它?它应该只是一个正常的void
还是有一个关键词我可以扔在它之前?它可能是inline
函数吗?我听说过这些,但不完全明白他们做了什么。谢谢!
答案 0 :(得分:2)
将其粘贴在相同的源(.cpp)文件中。将其放在namespace {}
- 匿名命名空间中。这保证了它不能在源文件之外使用/引用,它既可以向开发人员和编译器传达一些有用的信息。
inline
本身就是一个坏主意(如果存在具有相同签名和名称的另一个独立函数,则会发生错误的事情)。对于头文件中的“着名”函数,风险有所缓解。 inline
一旦将它放入匿名命名空间是无害的,并且可能会给amcompiler一个可能有用的提示。这可能没关系。
答案 1 :(得分:1)
inline用于小而简单的函数,您希望避免调用函数的开销。它基本上复制了更大函数内部函数的代码。
答案 2 :(得分:0)
满足run once
的需求是在名称空间中,因此我实例化了RunOnce
对象并传递了一个lambda:
namespace mystuff {
int somevars = 5;
RunOnce initialize([&](){
// do one-time initalization here
somevars = 0;
});
}
在哪里
class RunOnce {
public:
RunOnce(std::function<void(void)> init) {
init();
}
}
答案 3 :(得分:0)
通常建议将具有明确定义的单一职责的代码放入专用功能中,即使该功能仅被调用一次。至少这是我在所有有关主题的书中都看到的。
这使代码更具可读性,可维护性,并且您现在还可以为提取的功能编写单元测试。如果该功能不太可能需要进行专门的测试(涵盖了更广泛的单元测试等),您仍然可以使用static
关键字在同一文件中单独定义它,因此它不会与外部任何内容冲突。