Czy kompilatory C++ 11 (i czy nie) zauważają, że funkcja jest constexpr i traktować je jako takie, nawet jeśli nie są one zadeklarowane jako constexpr?niejawny constexpr?
byłem demonstrujący użycie constexpr komuś na przykładzie prosto z Wikipedii:
int get_five() {return 5;}
int some_value[get_five() + 7]; // Create an array of 12 integers. Ill-formed C++
Ku mojemu zaskoczeniu kompilator było OK z nim. Więc dalej zmieniłem get_five(), aby wziąć kilka parametrów int, pomnożyć je i zwrócić wynik, nadal nie będąc jawnie deklarowanym jako constexpr. Kompilator też był w porządku. Wygląda na to, że jeśli kompilator może to zrobić, nie ma sensu posiadanie ograniczeń, które są wymagane, aby jawnie zadeklarować coś, co jest niemożliwe.
Może twój kompilator obsługuje VLA jako rozszerzenie. Czy myślałeś o tym? – 0x499602D2
Jaki to jest kompilator? – SomeWittyUsername
możliwy duplikat [W książkach C++, tablica powiązana musi być stałym wyrażeniem, ale dlaczego poniższy kod działa?] (Http://stackoverflow.com/questions/5947661/in-c-books-array-bound-must-be -konstancyjno-ekspresyjny-ale-dlaczego-następujący-dorsz-kod) –