о vs / g ++ с копи-конструктором - PullRequest
1 голос
/ 25 марта 2012

Я пытаюсь скомпилировать код в Visual Studio (2008) и g ++.
В vs2008 это успешно, но в g ++ сообщается об ошибке.
если добавить const,
test(const test &source):a(source.a) {}
g ++ будет скомпилирован успешно.
Я знаю, что test aa = 2; создаст временный объект и вызовет конструктор копирования.
временный объект не может привязаться к неконстантной ссылке
Итак, почему vs2008 может скомпилировать его успешно?

class test{  
public:  
    test():a(1) {}  
    test(int num):a(num) {}
    test(test &source):a(source.a) {}  
private:
    int a;
};

int main(){
    test aa = 2;
    return 0;
}

1 Ответ

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

VS имеет нестандартное расширение, которое, к сожалению, позволяет.

Есть флаг компилятора для отключения расширений, но в последний раз я проверил, что также делает невозможным использование стандартной библиотеки. Лучше всего сохранить уровень предупреждения на 4 (хотя в данной конкретной ситуации предупреждение не выдается) и по возможности проверять свои компиляции с помощью нескольких компиляторов.

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