我知道我的类方法有三种不同的实现“位置”:
//.h class Foo { int getVal() const; }; //.cpp int Foo::getVal() const { return 0; }
//.h class Foo { int getVal() const { return 0; } };
//.h class Foo { int getVal() const; }; int Foo::getVal() const { return 0; }
这三种方法之间的主要区别是什么?
解决方法
这个问题有三个要素:可读性(代码看起来有多好),编译(编译器可以优化多少)和实现隐藏(如果你使用代码作为库,你可能不想明确地分享你的特殊酱汁与世界).
方法只显示头文件中功能的接口.这意味着您会显示一个漂亮的干净的界面,并且您的实现不会以明文形式显示.然而,代码不能在编译单元中嵌入,所以它在运行时可能会稍微慢一点(实际上,这只对代码的非常非常小的百分比来说是重要的).这应该是你的默认方式.
方法2是隐式内联.很长的功能会使你的课堂混乱(imho)不好.还将您的实施暴露给了世界.但是,该函数可以内联,而不是比在另一个地方定义它更为冗长.我保留这个非常小的功能.
方法3实际上是非法的,因为你将打破一个定义的规则,但是以下是正确的:
//Foo.h class Foo { int getVal() const; }; inline int Foo::getVal() const { return 0; }