例如,如果我有一个struct FooSpec
:
struct FooSpec { /* lots of data */ };
提供以下两项作为重载函数是不好的做法吗?还是我应该选择一个并坚持下去?
Foo *createFoo(const FooSpec *spec) { /* ... */ }
Foo *createFoo(const FooSpec &spec) { return createFoo(&spec); }
两者都可能引起意外问题吗?
最佳答案
做一件特定的事情应该只有一种方法。这将使用户的代码更清晰。因此,根据语义,您应该只选择一个:
nullptr
是要传递给createFoo
的有意义的值,则声明该函数以获取指针。 nullptr
传递给createFoo
,则将参数声明为引用,以使编译器对尝试传递nullptr
的人大吼大叫。 现在,您的代码的用户将转到“啊,我可以将null传递给该函数,太棒了!”或“好的,此功能需要一个实际的对象才能正常工作”。
在整个项目中都遵循此约定,以使代码的界面更加一致。
或者像WhozCraig所说的,