2016-12-16 4 views
7

aşağıdaki (geçersiz) kodu var varsayarsak ? C++ StandardınınC++ Oluşturucu Değer tarafından

Bölüm 12.8.2 diyor: B başka sınıfı ise sadece

struct A { 
    A(B) {}; 
}; 

gibi, derleyici normal yapıcı olarak yukarıdaki yöntem algıladığını beklenebilir

A non-template constructor for class X is a copy constructor if its first parameter is of type X& , const X& , volatile X& or const volatile X&

.

Bu davranış nerede tanımlanmaktadır? GCC 4.9.2, hata üzerine

+0

: geçersiz yapıcısı; Muhtemelen 'A (const A &)' –

+5

mu demek istiyorsunuz? Muhtemelen insanlar MSVS'nin güzel olmaya çalıştığı ve bunları bilmesini istedikleri kendi kopya kurucusunu yapmaya çalıştıklarında bu yeterli bir hatadır. – NathanOliver

+0

@NathanOliver: Bunu beğendim. – Bathsheba

cevap

5

N4140 [class.copy]/6

A declaration of a constructor for a class X is ill-formed if its first parameter is of type (optionally cv-qualified) X and either there are no other parameters or else all other parameters have default arguments.

+0

Teşekkürler, bu aradığım şey buydu. Hata mesajının sadece yanıltıcı olduğuna inanıyorum. – tobspr

+1

Beni ne 9 saniye? : P – Columbo

+1

Bu, hepimizin bildiğini belirtir, yapıcı bir hatadır. Soru, MSVS'nin neden bir kopya kurucusu olduğunu düşündüğü. – NathanOliver