Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++,示例类: class myclass { int a; int b; public: myclass() {} myclass(int x, int y) { a = x; b = y; } }; 功能: myclass function() { return myclass(2, 3); } 我不明白这句话: return myclass(2, 3); 怎么可能像这样返回对象? 看起来正在使用复制构造函数,但构造函数不应返回任何值?(请使用

示例类:

class myclass
{
  int a;
  int b;

public:
  myclass() {}
  myclass(int x, int y)
  {
    a = x;
    b = y;
  }
};
功能:

myclass function()
{
  return myclass(2, 3);
}
我不明白这句话:

 return myclass(2, 3);
怎么可能像这样返回对象?
看起来正在使用复制构造函数,但构造函数不应返回任何值?(请使用c++初学者语言)

返回语句有一个:
return
表达式,其中表达式可转换为函数返回类型

因此
myclass(2,3)
可以转换为返回类型(它是相同的类型)。您还可以使用
return{2,3}

从链接中,我们还注意到:

按值返回可能涉及构造和复制/移动 临时对象,除非已使用


return语句有一个:
return
表达式,其中表达式可转换为函数返回类型

因此
myclass(2,3)
可以转换为返回类型(它是相同的类型)。您还可以使用
return{2,3}

从链接中,我们还注意到:

按值返回可能涉及构造和复制/移动 临时对象,除非已使用

myclass(2,3)
是一个表达式,其计算结果为类型为
myclass
的新(临时)对象,通过调用
myclass::myclass(int,int)
构造函数构造

返回myclass(2,3)
使用该表达式的值(新构造的
myclass
)作为函数
函数的返回值。这又可能调用复制构造函数来复制从临时位置的值,在该临时位置中,它已经构建为返回值的任何位置(在最近的C++标准中应该是强制性的)。<> >代码> MyC类(2, 3)< /C> >是一个表达式,计算为新的(临时的)类型为
myclass
的对象,通过调用
myclass::myclass(int,int)
构造函数构造

返回myclass(2,3)
使用该表达式的值(新构造的
myclass
)作为函数
函数的返回值。这又可能调用复制构造函数来复制从临时位置的值,在该位置上,它已经构建为返回值的任何位置(在某些C++标准中应该是强制性的)。< /P> < P>语句< /P>
return myclass(2, 3);
做两件事:

  • 首先创建一个临时对象。这就是
    myclass(2,3)
    所做的。它创建一个对象,调用相应的构造函数

  • 通过值返回临时对象,这意味着它已被复制(或者更可能的是,该副本被作为返回值优化的一部分省略)

  • 声明

    return myclass(2, 3);
    
    做两件事:

  • 首先创建一个临时对象。这就是
    myclass(2,3)
    所做的。它创建一个对象,调用相应的构造函数

  • 通过值返回临时对象,这意味着它已被复制(或者更可能的是,该副本被作为返回值优化的一部分省略)


  • 不知道你不懂什么。它通过调用构造函数来创建一个
    myclass
    对象,然后从
    function()
    myclass(2,3)
    返回该对象。例如,您可以执行
    myclass A=myclass(2,3)。我第一次偶然发现类似“class_name(..)这样的语法,发现它返回的是object?从来没有看到它被用于任何C++初学者的书籍。CurimyNoX(…)是对构造函数的调用。请注意,构造函数的名称与类定义中定义的名称完全相同。谢谢,现在我至少了解了诸如“myclass obj=myclass(2,3)”或“myclass*ptr=&(myclass(2,3))之类的表达式;”在C++中有效,但不确定您不理解的内容。它通过调用构造函数来创建一个
    myclass
    对象,然后从
    function()
    myclass(2,3)
    返回该对象。例如,您可以执行
    myclass A=myclass(2,3)。我第一次偶然发现类似“class_name(..)这样的语法,发现它返回的是object?从来没有看到它被用于任何C++初学者的书籍。CurimyNoX(…)是对构造函数的调用。请注意,构造函数的名称与类定义中定义的名称完全相同。谢谢,现在我至少了解了诸如“myclass obj=myclass(2,3)”或“myclass*ptr=&(myclass(2,3))之类的表达式;”在C++中有效