Возврат экземпляра по значению из компиляции стека методов - PullRequest
2 голосов
/ 18 марта 2012

Вы можете объяснить, почему это не скомпилируется:

(это ошибка:

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

Код:

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

, но это так:1009 *

Man goo(){
    return Man();
}

Ответы [ 3 ]

4 голосов
/ 18 марта 2012
Man m();

Это означает, что «где-то еще в программе я определю функцию с именем m, которая не принимает аргументов и возвращает Man». Да, даже если вы пишете это внутри другой функции.

Man m;

Это означает, что «m является переменной типа Man». Поскольку Man является типом класса, будет вызван конструктор по умолчанию, и скобки не нужны.

3 голосов
/ 18 марта 2012

Вам не нужны эти скобки в первом примере:

Man goo(){
  Man m;
  return m;
}
2 голосов
/ 18 марта 2012

Вам не нужно () в первом случае. Конструктор по умолчанию вызывается неявно.

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

Во втором случае вы вызываете конструктор.

...