gpt4 book ai didi

c++ - C++分别分配值还是创建一个新对象?

转载 作者:行者123 更新时间:2023-12-02 09:54:41 25 4
gpt4 key购买 nike

例如,如果我有一个glm::vec3并想为其分配一个新值,那么以下哪种方法更快?

vec = glm::vec3(1, 2, 3);

要么

vec.x = 1;
vec.y = 2;
vec.z = 3;

如果我理解正确,第一种方法将执行以下操作:
  • 调用glm::vec3构造函数在堆栈上创建一个新的临时 vector
  • 调用glm::vec3的复制分配运算符以复制新的 vector

  • 第二种方法只是赋值,并且避免创建虚拟的临时 vector ,那么为什么我要做大量的***而不仅仅是分配值?

    最佳答案

    不要想太多。

    您实际上并不是在对计算机编程; 您正在描述程序。使用您的描述来创建将由计算机执行的程序是编译器的工作。这是由C++标准的“按条件”规则提供支持的实际情况:编译器没有义务按照一步一步地遵循您的“步骤”,只要真实(已编译)程序的可观察结果与您的匹配即可。说明(源代码)。

    您的编译器非常非常聪明。 它有足够的能力确保它不会针对这种情况执行过多,额外,不必要的步骤,无论您以哪种方式编写。对我来说,是the resulting assembly for both approaches is identical,除非您降低优化级别(这实际上是在增加“使程序看起来更像我描述中的步骤”级别,这是调试功能)。

    只需编写反射(reflect)您意图的清晰,可自我记录的简单代码即可。 只有在某些情况下编译器可能未尽其所能,您才可以进行此类问题的干预。

    *好吧,it was Marek😉

    关于c++ - C++分别分配值还是创建一个新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61239187/

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