42 als unsigned int ist gut als "42U" definiert.Wie schreibe ich ein vorzeichenloses kurzes int-Literal?
unsigned int foo = 42U; // yeah!
Wie kann ich schreibe "23", so dass es klar ist, es ein unsigned short int ist?
unsigned short bar = 23; // booh! not clear!
EDIT so, dass die Bedeutung der Frage mehr klar:
template <class T>
void doSomething(T) {
std::cout << "unknown type" << std::endl;
}
template<>
void doSomething(unsigned int) {
std::cout << "unsigned int" << std::endl;
}
template<>
void doSomething(unsigned short) {
std::cout << "unsigned short" << std::endl;
}
int main(int argc, char* argv[])
{
doSomething(42U);
doSomething((unsigned short)23); // no other option than a cast?
return EXIT_SUCCESS;
}
ist Declare a ' const unsigned short 'Objekt mit einem passenden Namen und dann verwenden Sie das anstelle der 23. Es hilft Ihnen immer noch nicht explizit sagen, dass 23 soll nicht signiert kurz sein, aber zumindest müssen Sie nur diese Erklärung zu überprüfen, um die Richtigkeit zu gewährleisten . Überall sonst wird die Konstante verwendet und so wird die Bedeutung klar sein. –
@Richard Corden: Es ist hunderte Male als Eingabewerte und führt in Unit-Tests, also je kürzer, desto besser ... U für unsigned int ist bequem, aber (unsigned short) Casts oder Const unsigned kurze Objekte sind ärgerlich . – moala
Sie fragen, wie Sie ein unsigniertes Kurzliteral deklarieren. Wenn Sie nach dieser Frage gesucht hätten, hätten Sie Ihre Antwort gefunden. Wie gesagt wurde, kannst du nicht. –