仅调用一次的C ++函数

时间:2015-12-04 22:42:39

标签: c++

我正在研究一个项目并在一个大函数中清理代码,我认为它应该是一个单独的函数。但是这个单独的函数只会在更大的函数中使用一次。我该怎么对待它?它应该只是一个正常的void还是有一个关键词我可以扔在它之前?它可能是inline函数吗?我听说过这些,但不完全明白他们做了什么。谢谢!

4 个答案:

答案 0 :(得分:2)

将其粘贴在相同的源(.cpp)文件中。将其放在namespace {} - 匿名命名空间中。这保证了它不能在源文件之外使用/引用,它既可以向开发人员和编译器传达一些有用的信息。

由于潜在的odr违规,

inline本身就是一个坏主意(如果存在具有相同签名和名称的另一个独立函数,则会发生错误的事情)。对于头文件中的“着名”函数,风险有所缓解。 inline一旦将它放入匿名命名空间是无害的,并且可能会给amcompiler一个可能有用的提示。这可能没关系。

答案 1 :(得分:1)

inline用于小而简单的函数,您希望避免调用函数的开销。它基本上复制了更大函数内部函数的代码。

http://www.cplusplus.com/articles/2LywvCM9/

答案 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关键字在同一文件中单独定义它,因此它不会与外部任何内容冲突。