从方法堆栈编译中按值返回实例

Return instance by value from a method stack compilation

本文关键字:返回 实例 方法 堆栈 编译      更新时间:2023-10-16

你能解释一下为什么这不会编译吗:

(这是错误:

../Man.cpp:33:9: error: conversion from ‘Man (*)()’ to non-scalar type ‘Man’ requested)

代码:

Man goo(){
  Man m();
  return m;
}

但这是:

Man goo(){
    return Man();
}
Man m();

这意味着"在程序的其他地方,我将定义一个名为m的函数,该函数不接受任何参数,并返回一个Man"。是的,即使你把它写在另一个函数里。

Man m;

这意味着"mMan类型的变量"。由于Man是一个类类型,因此将调用默认构造函数,并且不需要括号。

您不希望在第一个示例中使用这些括号:

Man goo(){
  Man m;
  return m;
}

在第一种情况下不需要()。默认构造函数是隐式调用的。

Man goo(){
    Man m;
    return m; 
}

在第二种情况下,您正在调用构造函数。