Функция C ++ без возврата возвращаемых данных - PullRequest
2 голосов
/ 17 марта 2012

Извините,

Я играл с с ++ и сделал что-то странное, и это сработало, кто-то знает, почему это сработало.

Main.cpp

#include <iostream>
#include "c1.h"

using namespace std;

Classe c(){
    Classe v();
}
int main(){
    cout << c().x;
    return 0;
}

c1.h

#include <iostream>

using namespace std;

class Classe{

    public:
        Classe(){
            x = 100;;
    }
    int x;
    };  

Итак, почему я могу вызвать c (). x, если функция Classe c () {Classe v ()} не возвращает переменную?

Нет предупреждений с ибез -wall.

если я возвращаю v в функции, которую он не компилирует: сообщение об ошибке с возвратом:

main.cpp: в функции 'Classe c ()': main.cpp:8: ошибка: запрошено преобразование из Classe (*) () в нескалярный тип Classe

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Я думаю, это случайно, ваш компилятор должен был предупредить вас, что c () не возвращает значение.

случайно регистр, использованный для возврата значения из функции, оказался загруженным с адресом локальной переменной, выделенной в этой функции.

И, между прочим, ваше объявление local v () в функции c () не объявляет переменную типа Classe, но функция не принимает аргументов и возвращает объект Classe.

1 голос
/ 17 марта 2012

Компилятор не обязательно знает, что c не возвращает допустимый объект (его можно определить далеко от main). При компиляции c вы получите предупреждение компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...