Hum*_*awi 6 c++ pass-by-reference pass-by-value c++11
我知道在一般情况下传递值,引用或指针之间的差异.但是,我的问题是关于结构简单的容器的特殊情况.
假设这种情况:
class image{
image()=default;
image(image const&)=default;
~image()=default;
int w;
int h;
uchar* data;
}
Run Code Online (Sandbox Code Playgroud)
传递此类的对象时,复制的只是两个整数而指针不是整个数据.在这种情况下是否有目的通过引用传递它?或者有没有通过引用传递它的目的?
引发这个问题的是我已经读过,iterators在C++中,它被设计为轻量级并且通过值传递.所以,我认为这个概念可以应用于代表容器的类到实际数据而不是数据.
使用默认的拷贝构造函数,任何副本将是浅薄,不会使记忆的副本指出来的data.因此,当您通过引用传递时,将只传递两个整数和指针,总共大约12个字节(取决于您的体系结构,即指针大小).
这种差异是如此之小,以至于您是按价值还是通过参考传递它并不重要.后者可能稍快一些,因为指针可能总是通过CPU寄存器传入,而12字节可能不会,但这实际上是微优化.
我个人通过(const)引用传递除了原始类型之外的任何东西,默认情况下,除非我有理由不这样做(参见jupp0r的答案).在开发过程中的主要优点是随着类的增长,我不必担心它何时变得太大并且改变我的所有函数以通过引用传递.
至于默认的C++迭代器去:注意,他们的意思基本上只是指针.实际上我知道,对于在发布模式下启用优化的Microsoft Visual C++编译,连续数据结构的迭代器std::vector将减少到这一点.我不知道其他编译器是否也这样做,我会这么认为.但是你会注意到,如果禁用优化,那么突然写入it++和++it循环增量之间存在差异,例如 - 纯粹是因为前一种情况下的附加复制操作.因此,如果你经常这么做,即使"便宜复制"也可能产生影响.像往常一样:担心表现时,根据数字来衡量和决定.
| 归档时间: |
|
| 查看次数: |
1782 次 |
| 最近记录: |