2015-06-06 16 views
10

Bu çok basit kod kod GCC 6.0 bir hata verir nedenleri sonra kod derler. Bu bir hata mı? Kod, clang'da iyi derler.statik veri üyesine başlatıcısı olarak geçici değerin başlangıç ​​durumuna hata

+0

Bir cevabım yok, sadece olası bir sebep önerebilirim. T {}, T'nin temel bir tür olmadığı anlamına gelir, bu nedenle int'ye dönüşüm yoktur. Fakat T() kullandığınızda, T int veya neyse olabilir. –

+0

@SergiiKhaperskov 'T {}' ortak olarak "uniform-initialization" (standart terimi kullanmıyor olsa da) olarak adlandırılır. Yerleşik olsun veya olmasın herhangi bir veri türü bir çift kaşlı ayraç kullanılarak başlatılabilir. Bu, çoğunlukla [Most Vexing Parse] (http://en.wikipedia.org/wiki/Most_vexing_parse) sorununu aşmak için C++ 11'e eklenmiştir. –

+0

Anladım. Temel türlerin {} ile başlatılabileceğini bilmiyordum. Sadece nesneler, diziler ve kaplar için olduğunu sanıyordum. Zaman ayırdığınız için üzgünüm :) –

cevap

2

T()'un çalışmasının nedeni, derleyicinin bunu hiçbir argüman almayan bir işlev bildirimi olarak yorumlamasıdır. Derleme, sadece bir açık döküm ile yapılacaktır:

static const int b = (const int) T{}; 
+0

Bu doğru değil. Bu sözdiziminin bir işlev bildirimi olarak yorumlanabilmesi mümkün değildir. 'T()', T {} 'ile etkili bir şekilde eşdeğerdir. Bir * nesne * yaratır, bir işlev değil. –

+0

Bu yüzden, varsayımdan önce bunu görmek için daha fazlasını araştırın. –

+0

Neyi varsayıyorum? –

İlgili konular