Я пытаюсь скомпилировать код в Visual Studio (2008) и g ++.
В vs2008 это успешно, но в g ++ он сообщил об ошибке.
если добавить const
,
test(const test &source):a(source.a) {}
g ++ скомпилируется успешно.
Я знаю, что test aa = 2;
создаст временный объект и вызовет экземпляр-конструктор.
временный объект не может связываться с неконстантной ссылкой
так, почему vs2008 может скомпилировать его успешно?о vs/g ++ с copy-constructor
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;
}
Для этого, к сожалению, нет предупреждений./Za отключит нестандартное поведение, но/Za не рекомендуется использовать. –
@JamesMcNellis: Ах, вы правы, даже с '/ Wall' (который в принципе непригодным для использования). Он * предупреждает с помощью 'test aa = test (2);', что и должно быть, но, увы, не иначе. – GManNickG
@JamesMcNellis: Я нахожу, что vs не вызывает copy-constructor, он вызывает 'test (int num)'. – skeu