Bir başlatıcı listesini parantez içinde sarmalamanın etkisi nedir? Liste başlatma için başka bir form mu yoksa sadece belirli senaryolarda mı çalışıyor?Bir başlatıcı listesini parantez içinde sarmalamanın etkisi nedir?
Örneğin, a
düşünün:
struct A {
A(float a, float b) {}
};
int main()
{
A b(1.0f, 0.0f); // Direct initalization, finds ctor for (float, float)
A c{1.0f, 0.0f}; // List initalization, finds a matching ctor
A a({1.0f, 0.0f}); // Is this list initalization... which is expanded?
}
Bu lanet olası kurucular ... alışmak için zaman alır. Teşekkürler! – Raginator
@Raginator Sorun değil. Ben sadece, bu durumda daha iyi bir eşleşme olduğu gibi kopya yapıcı yerine hareket yapıcıyı kullanacağı gibi hareket semantiği içerecek şekilde cevabı güncelledim. – NathanOliver
Teknik olarak doğru olmasına rağmen, herhangi bir hareket veya kopya kurucusu seçilecekleri için çağrılmayacaktır (C++ 17'de zorunlu kopya seçimi bile). C++ 14'te bu yapıcılar hala erişilebilir olsa da, C++ 17'de bile silinebilirler. – Jodocus