【问题标题】:Return instance by value from a method stack compilation从方法堆栈编译中按值返回实例
【发布时间】:2012-03-17 22:47:56
【问题描述】:

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

(这是错误:

../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++ compiler-construction return-value most-vexing-parse


【解决方案1】:
Man m();

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

Man m;

这意味着“mMan 类型的变量”。由于Man是类类型,所以会调用默认构造函数,不需要括号。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-10-06
        • 2013-04-22
        • 2019-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-30
        • 1970-01-01
        • 2012-07-14
        相关资源
        最近更新 更多