2014-12-01 19 views
15

znalazłem tę dziwną składnię:Jak zainicjować integer jako "a = {1,}" kompilować?

int a = {1,}; 

I to działa we wszystkich kompilatorów próbowałem. Jak to się kompiluje?

EDYTOWANIE: Myślałem, że inicjatory skalarne mogą mieć tylko jeden element, rodzący moje pytanie. Przepraszam za wszystkie kłopoty.

+3

Proszę, wyświadcz wszystkim przysługę i nie pozwól autorowi tej linii uciec bezkarnie. Zawołaj go do chłodnicy wody, zwiń gazetę, uderz go i powiedz "Nie, zły! Zły programista!" – DanielKO

+0

@DanielKO Z jakiej linii? – user4309946

+1

Opublikowana przez ciebie linia, int a = {1,}; ', powiedziałaś, że ją znalazłeś. Mówiąc językiem, proszę nigdy nie pisz tego kodu, chyba że tworzysz zgłoszenie do IOCCC. – DanielKO

Odpowiedz

15

Jak stwierdził Matt McNab w komentarzach, składnia wzmocnionej zainicjowanej listy jest taka sama niezależnie od tego, czy używasz jej do zainicjowania skalaru, czy czegokolwiek innego.

C++ 11 §5.17 stany

usztywnione-startowe lista może pojawić się po stronie prawej

  • przypisanie do skalara, w którym to przypadku lista initializer ma co najwyżej jeden element.

Definicja usztywnione-init-listy jest (z §8.5):

braced-init-list: 
    { initializer-list ,opt } 
    { }

gdzie 'opt' oznacza, że ​​przecinek spływu jest opcjonalne.

+0

N3337 to szkic, a nie standard ISO. –

+0

Tak, wiem to. Jest to jedyny, do którego mam dostęp. Zaktualizowałem nieco, aby to wyjaśnić. – harmic

+5

+++ 1 Świetna odpowiedź na to pytanie, nie jakieś inne pytanie. –

Powiązane problemy