2

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

(这是错误:

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

代码:

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

但这确实:

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

3 回答 3

4
Man m();

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

Man m;

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

于 2012-03-17T23:02:43.150 回答
3

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

Man goo(){
  Man m;
  return m;
}
于 2012-03-17T22:52:52.117 回答
2

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

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

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

于 2012-03-17T22:52:29.580 回答