Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果您不';t通过引用将对象传递到函数中_C++_Reference - Fatal编程技术网

C++ 如果您不';t通过引用将对象传递到函数中

C++ 如果您不';t通过引用将对象传递到函数中,c++,reference,C++,Reference,我试图教一些学生,在下面的情况下,你应该通过引用传递,否则对象将被复制 注意:他们还不知道复制构造函数,所以如果可能的话,我不想在示例中提到它们 int sumOfSizes(CObject const & a, CObject const & b) { return a.getSize() + b.getSize(); } 有谁能帮我举一个真实世界的例子,其中的和实际上不是预期的吗?正如@Space\u c0w0y在他的评论中所暗示的那样,在传递值时,这可能会做一些“

我试图教一些学生,在下面的情况下,你应该通过引用传递,否则对象将被复制

注意:他们还不知道复制构造函数,所以如果可能的话,我不想在示例中提到它们

int sumOfSizes(CObject const & a, CObject const & b)
{
    return a.getSize() + b.getSize();
}

有谁能帮我举一个真实世界的例子,其中的和实际上不是预期的吗?

正如@Space\u c0w0y在他的评论中所暗示的那样,在传递值时,这可能会做一些“意外”的事情的唯一方法是如果
CObject
的复制构造函数做了一些“意外”的事情(这样本地
CObject
实例就不等同于原始实例(无论在何种意义上)。这反过来又表明设计不好


因此,您的反例将不得不依赖一个设计拙劣的
CObject

这样的示例可能表明
CObject
的设计拙劣。这两个参数都应该是CObject const&主要参数是性能,而不是正确性,不是吗?假设每个CObject包含一百万个字符串-copy仅仅通过复制来确定大小是个坏主意。鉴于复制构造函数是问题的核心,我将首先使用一个基本类型示例并将其与一个复杂对象进行比较。基本类型示例将向他们介绍使用副本传递值的想法,然后讨论为什么复制可能是个坏主意。