2017-12-06 1 views
0

Frage What does the "L" mean at the end of an integer literal? beschreibt, was L bedeutet am Ende von Int Literal. Ich bin verwirrt warum nicht long int i = 33 anstelle von int i = 33L angeben? Das gleiche gilt für andere Typen. Anstatt double b = 3.0L anzugeben, warum nicht long double schreiben?C++ Suffix L vs Angabe lange Doppel

+0

http://en.cppreference.com/w/cpp/language/integer_literal – user0042

+0

Manchmal weisen Sie eine Variable nicht zu, sondern verwenden sie als Ausdruck in einem Ausdruck. Dies kann verwendet werden, um beispielsweise eine Erweiterung der Konvertierung zu erzwingen. – cdhowie

+0

Wenn Sie anstelle eines bestimmten Typs "auto" verwenden, leitet das Literal den richtigen Typ ab. – user0042

Antwort

2

Ich bin verwirrt, warum nicht lange int i = 33 anstelle von int i = 33L angeben?

Denn die 2 Aussagen bedeuten 2 verschiedene Dinge:

long int i = 33; // take constant of type int, convert it to long int and assign to i. 

int i = 33L; // take constant of type long int, convert it to int and assign to i. 

So beenden Sie mit variabler i unterschiedlicher Art auf. Gleiches gilt für das Double in Ihrem Beispiel.

1

Obwohl Sie sich in vielen Fällen auf die extrem gut definierten erweiternden Konvertierungsregeln verlassen können, müssen Sie manchmal explizit den Typ eines Literals angeben.

Zum Beispiel

long double f = 1.0; 
f = std::max(f, 2.0L); 

kompilieren nicht, wenn die Argumente von max denselben Typ haben. Schreiben double b = 3.0L wäre in der Tat sinnlos, und ein Compiler wird Sie wahrscheinlich ignorieren und kompilieren double b = 3.0.