例如,如果我有一个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所说的,

    07-28 03:06