, kullanıcı tanımlı dönüştürme işlevi C::operator A()
aşağıdaki parçasında dolaylı kopya başlatır bir direkt başlatma değişken a
tip A
bir prvalue içine tip C
bir lvalue dönüştürmek için çağrılır.Tam olarak C++ 14 Standardında, doğrudan başlatma işleminde kullanıcı tanımlı bir dönüştürme işlevinin kullanılmasına izin veriliyor mu? Örneğin
struct A {};
struct C { operator A() { return A(); }; };
int main()
{
C c;
A a(c);
}
Sadece bunun C++ 14 Standardında nerede açıklandığını bilmek istiyorum. Cevabın [over.match.copy]/1 mermi noktasında (1.2) olduğunu hissediyorum, ancak kullanıcı tanımlı dönüşüm tarafından Kopya başlatma başlatılması ile ilgili bir sorun yaşıyorum. Tek bir argüman ile çağrılabilir A
iki kurucular vardır
Ben kullanıcı tanımlı conversion_ tarafından _copy-başlatma tipi 'A (const C &)' bir yapıcı ifade eder düşünüyorum, ama bu kod kullanır gibi değil. Kodunuz, yalnızca kullanıcı tanımlı bir dönüşümün sonucu olan bir argümana sahip kopya kurucuyu 'A (const A &)' olarak adlandırır. – rodrigo
[over.match.ref]. Kopyalama kurucusunun parametresine bağlanmak için 'c' gerçekten dönüştürüyorsunuz. –
@rodrigo Tam olarak bu sorularımda anlatmaya çalıştığım şey, yani kod, "c" değişkenini "c" den "C" ye çevirme işlevini kullanarak başlatmak için varsayılan kopya yapıcıyı kullanıyor.) '. –