Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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++ 在声明然后分配对象的情况下创建的临时对象_C++ - Fatal编程技术网

C++ 在声明然后分配对象的情况下创建的临时对象

C++ 在声明然后分配对象的情况下创建的临时对象,c++,C++,我修复了一个用户定义的类,带有一个默认构造函数、一个参数构造函数和一个赋值运算符 当我声明一个对象并分配它时: Fixed a; a = Fixed( param ); 我得到: 调用默认构造函数(第1行) 调用参数构造函数(第2行) 呼叫分配操作员(第2行) 调用析构函数(第2行) 当然,我可以(也应该)更喜欢初始化(修复了一个(参数))而不是赋值。 但我想知道第二行发生了什么。 是否创建了临时对象 以下是我对临时对象的发现 在某些情况下,编译器有必要创建临时 物体。可以为以下对象创建这些临

我修复了一个用户定义的类,带有一个默认构造函数、一个参数构造函数和一个赋值运算符

当我声明一个对象并分配它时:

Fixed a;
a = Fixed( param );
我得到:

  • 调用默认构造函数(第1行)
  • 调用参数构造函数(第2行)
  • 呼叫分配操作员(第2行)
  • 调用析构函数(第2行)
  • 当然,我可以(也应该)更喜欢初始化(
    修复了一个(参数)
    )而不是赋值。 但我想知道第二行发生了什么。 是否创建了临时对象

    以下是我对临时对象的发现

    在某些情况下,编译器有必要创建临时 物体。可以为以下对象创建这些临时对象 原因:

    存储返回用户定义值的函数的返回值 类型仅当您的程序没有创建临时表时,才会创建这些临时表 将返回值复制到对象。

    在这里,程序会复制对象的返回值,那么为什么会创建临时对象呢

    是否创建了临时对象

    表达式
    Fixed(param)
    将创建一个临时对象。然后,该临时对象将传递给
    a
    对象的赋值运算符

    声明

    a = Fixed( param );
    
    在某种程度上相当于

    {
        Fixed temporary_object( param );
        a.operator=( temporary_object );
    }
    
    存储返回用户定义类型的函数的返回值。仅当程序未将返回值复制到对象时,才会创建这些临时值

    你说的那句话无关紧要<代码>固定(参数)不是函数调用

    这一行指的是:

    Fixed f(param) {
      return Fixed(param);
    }
    
    ...
    Fixed a;
    a = f(param);
    
    在这种情况下,该行说明不应该创建一个临时文件来保存
    f
    的结果,然后将其复制到
    a
    。这将是您在上面看到的内容之外的内容

    还可以尝试优化级别