[英]C++ passing in a class member item to a member function
不必要地将成员项传递给成员函数有什么后果(不是劣质代码):
struct foobar
{
char * arr; //properly initialized to SIZE at some point
}
class foo
{
public:
void bar(foobar&);
foobar barfoo;
};
void foo::bar(foobar& barf)
{
cin.get(barf.arr, SIZE, '\n');
cin.ignore(100, '\n');
}
有什么理由不完全消除bar
的参数,而直接调用barfoo
吗? 不这样做的后果是什么?
这取决于。
如果只有在将this->barfoo
作为参数传递时才调用foo::bar
上下文,那么这是很愚蠢的(尽管不是很有害)。
但是,在this->barfoo
不是唯一可以传递给成员函数的参数的情况下,显然可以了。
结果就是不能将其他foobar实例传递给同一方法。
问题不在于是否有时将成员发送给方法,而在于调用者是否希望能够指定参数。
由于这是一个公共方法,因此可能有此类以外的调用者。
没有理由不消除它。 至少在将其传递给函数时,您将进行额外的取消引用。
但是,如果somethign从类外部使用bar(foobar&),则可以重载它并执行以下操作:
class foo {
public:
void bar(); /* Uses default barfoo */
void bar(foobar&);
foobar barfoo;
private:
};
viod foo:bar() {
bar(barfoo);
}
void foo::bar(foobar& barf) {
cin.get(barf.arr, SIZE, '\n');
cin.ignore(100, '\n');
}
传递参数会产生一些开销,因此,如果您永远不会与另一个成员调用该方法,则可以摆脱该参数。 如果将来可能需要执行以下操作:
class foo
{
public:
void bar(foobar&);
private/*(or still public)*/:
foobar barfoo;
foobar barfoo2;
void some_other_method() {
//do stuff
bar(barfoo);
bar(barfoo2);
};
那我就别管它了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.