gpt4 book ai didi

c++ - 分配 '=' 时,C++ 结构是完全复制还是仅引用?

转载 作者:太空狗 更新时间:2023-10-29 19:40:30 24 4
gpt4 key购买 nike

如果结构被完全复制,那么第一个循环比第二个循环更昂贵,因为它对 v 的每个元素执行额外的复制。

vector<MyStruct> v;

for (int i = 0; i < v.size(); ++i) {
MyStruct s = v[i];
doSomething(s);
}

for (int i = 0; i < v.size(); ++i) {
doSomething(v[i]);
}

假设我想编写高效的代码(如在循环 2 中),但同时我想命名从 v 中提取的 MyStruct 元素(如在循环 1 中)。我可以这样做吗?

最佳答案

当您使用 = 时,结构(以及与此相关的所有变量)确实被完全复制。重载 = 运算符和复制构造函数可以让您更好地控制发生的事情,但是您无法使用它们将行为从复制更改为引用。您可以通过创建如下引用来解决此问题:

for (int i = 0; i < v.size(); ++i) {
MyStruct& s = v[i]; //& creates reference; no copying performed
doSomething(s);
}

请注意,当您将结构传递给函数时,该结构仍将被完整复制,除非参数被声明为引用。这是将结构作为参数时的常见模式。例如,

void doSomething(structType x);

通常会比

表现差
void doSomething(const structType& x);

如果 sizeof structType 大于 sizeof structType*const 用于防止函数修改参数,模仿按值传递行为。

关于c++ - 分配 '=' 时,C++ 结构是完全复制还是仅引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21668202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com