例如,如果我有一个结构体
FooSpec
:struct FooSpec { /* lots of data */ };
提供以下两个函数的重载形式是不好的实践吗?还是我应该只选择一个并坚持使用它?
Foo *createFoo(const FooSpec *spec) { /* ... */ }
Foo *createFoo(const FooSpec &spec) { return createFoo(&spec); }
同时拥有这两者会导致意想不到的问题吗?
nullptr
的选项,则需要使用指针版本,而引用版本是为了方便某些客户作者避免键入和号&
而添加的复杂性。如果 NULL 不是一个选项,则引用版本是正确的方法,指针版本同样增加了复杂性,这次是为了避免键入星号*
。在任一情况下都没有实质性的好处,两者都是以增加复杂度为代价进行的。仅因为你可以并不意味着你应该。选择适当的模型,并告诉客户端“这是您的接口”。 - WhozCraigconst *
(或相反,但这对我来说没有太多意义)的过程中,这并不是一个坏习惯。 - didierc