Проблемы с конструктором C ++ / конструктором копирования в g ++ 3.4.6 - PullRequest
2 голосов
/ 03 февраля 2011

Вот фрагмент кода:

class test {

        public:
                test(){
                        cout<<"I am in default constructor ";
                }
                static void func(const  test &obj){
                        cout<<"I am in function ";
                }
        protected:
                test( const test &o){
                        cout<<"I am  in copy constructor ";
                }
};

int main()
{
        test::func(test());
}

Приведенный выше код выдает следующую ошибку с g ++ 3.4.6 (в Red Hat Linux) при компиляции:

В функции `int main () ':

ошибка: `test :: test (const test &)' защищен

ошибка: в этом контексте

Однако, если вы компилируетес g ++ 3.3.2 или g ++ 4.4.3 или любой другой версией g ++ (в Red Hat Linux) он успешно компилируется и выдает следующий вывод:

Я в конструкторе по умолчанию Я в функции

В приведенном выше коде я передал временный объект (созданный конструктором по умолчанию) в функцию func по ссылке.Так почему же компилятор 3.4.6 вызывает конструктор копирования?

1 Ответ

0 голосов
/ 03 февраля 2011

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

EDIT

кстати, вы пытались изменить настройки компилятора? Разные уровни оптимизации могут иметь разные ошибки.

...