Tak, zabawy z constexpr, MSVC (Visual Studio 2012) dał mi błąd podczas próby zakwalifikowania mojej funkcji ze słowem kluczowym constexpr
przy użyciu tego prostego programu (zawiera pominięta):Dlaczego MSVC++ 11 odrzuca kwalifikację constexpr funkcji?
constexpr int factorial(int n)
{
return n <= 1 ? 1 : (n * factorial(n-1));
}
int main(void)
{
const int fact_three = factorial(3);
std::cout << fact_three << std::endl;
return 0;
}
constexpr
zostało podkreślone na czerwono z następujący komunikat:
błąd: deklaracja ta ma klasę przechowywania lub wpisz specyfikator
i próbuje skompilować Progr podałem następującą wartość:
1> main.cpp (5): błąd C2144: błąd składni: "int" powinno być poprzedzone ";"
1> main.cpp (5): błąd C4430: brak specyfikatora typu - int przyjęto. Uwaga: C++ nie obsługuje domyślnego-int
To naprawdę mnie zastanawia, ponieważ jest to bardzo dobry przykład Cppreference uses to illustrate the use of constexpr
. Najpierw użyłem prostej funkcji, która zwróciła literał, tj. constexpr int func(){return 5;}
, ale która spowodowała ten sam błąd. Pierwszą wiadomość zinterpretowałem jako "powinna być funkcją członka struktury lub klasy", ale przykład z Cppreference pokazuje, że nie jest to konieczne.
Więc, czego oczywiście brakuje tutaj?
Och, nie myślałem o tym ... Dzięki za wskazanie tego! Zatrzymam ten link i zaakceptuję go jak najszybciej. Nie rozumiem jednak, co się stało ... – JBL
Myślę, że jest to rozsądne pytanie zawierające kod, który nie działał, czego oczekiwałeś i jaki błąd się pojawił. – jcoder
Zgadzam się, pytanie jest w porządku. Właściwie to po prostu pójdę i zabiorę się za to. – Chowlett