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

问题描述 投票:0回答:3

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

(这是错误:

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

代码:

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

但这确实:

Man goo(){
    return Man();
}
c++ return-value most-vexing-parse
3个回答
4
投票
Man m();

这意味着“在程序的其他地方,我将定义一个名为

m
的函数,它不接受参数并返回
Man
”。是的,即使您将其编写在另一个函数中。

Man m;

这意味着“

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


3
投票

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

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

2
投票

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

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

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.