Is there a "new" style for casting?
-
@J.Hilk i got other warnings like
int x = screensize().width() * .8; int y = screensize().height() * .7;
and warning is
/home/shaber/Desktop/Folder/work3/coreApps/app/corefm/corefm.cpp:29: warning: implicit conversion turns floating-point number into integer: 'double' to 'int'
-
@saber You are multiplying an int with a double and assign the result to an int, this is dangerous.
To get rid of the warning you can cast the result of the multiplication to int or (even better) think about what you're doing and whether rounding in a defined way would be better. -
@saber said in Is there a "new" style for casting?:
@J.Hilk i got other warnings like
int x = screensize().width() * .8; int y = screensize().height() * .7;
and warning is
/home/shaber/Desktop/Folder/work3/coreApps/app/corefm/corefm.cpp:29: warning: implicit conversion turns floating-point number into integer: 'double' to 'int'
of course,
this breaks down toint = int * double;
int = double <- precision loss, truncated after the decimal pointthis is an implicit conversion of double to int, therefore cast it alsoif thats intendet behaviour:
int x = static_cast<int>(screensize().width() * .8);
or round it
int x = qRound(screensize().width() * .8);
-
@Abrar said in Is there a "new" style for casting?:
int x = int(screensize().width() * .8);
int y = int(screensize().height() * .7);This would bring back the warning about old style cast.
-
@Abrar said in Is there a "new" style for casting?:
static_cast<int>(screensize().width() * .8)
Yes, this is C++ type cast.
(int)(someVariabl);
Old C style cast which should not be used in C++.
See https://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-const-cast-and-reinterpret-cast-be-used -
@jsulm thats not what @aha_1980 said earlier, and what I read from my trusted source
(http://www.cplusplus.com/doc/tutorial/typecasting/) :-)the new (qtcreator)clang code model seems to agree as well, as int(xy) is not flaged as old style casting.
-
i got more warnings to fix.
switch( m_model->state() ) { case Battery::FullyCharged: ui->statusEdit->setText( tr( "Full Charged" ) ); ui->timerLblEdit->setText( tr( "Full Charged" ) ); break; case Battery::Discharging: addSeconds = static_cast<int>(m_model->toEmpty()); addSeconds = rate != 0 && addSeconds == 0 ? ( energy - energyEmpty ) * 4 / rate: addSeconds; ui->statusEdit->setText( tr( "Discharging" ) ); ui->timerLblEdit->setText( tr( "Discharged in : " ) ); break; case Battery::Charging: addSeconds = static_cast<int>(m_model->toFull()); addSeconds = rate != 0 && addSeconds == 0 ? ( energyFull - energy ) * 4 / rate : addSeconds; ui->statusEdit->setText( tr( "Charging" ) ); ui->timerLblEdit->setText( tr( "Charged in : " ) ); break; default: ui->statusEdit->setText( tr( "No Battery" ) ); ui->timerLblEdit->setText( tr( "No Battery" ) ); break; }
-
@jsulm said in Is there a "new" style for casting?:
@J.Hilk Both are C-style casts
Yep but clang does not complain about
int(something)
while it does complain about(int) something
. Just sayin' :-) -
-
@saber The first warning says already what the problem is: comparing floating point numbers with == and != isn't save because of inaccuracy of such numbers represented in a computer. Depending on what you really want you should cast to int or use <, > for comparisions.
For the second warning take a look at https://softwareengineering.stackexchange.com/questions/179269/why-does-clang-llvm-warn-me-about-using-default-in-a-switch-statement-where-all
In general, you should try to find out what the problem is by yourself first before going to a forum and asking. Or do you want to ask for each and every warning you get? I mean, I'm happy to help, but sometimes I have the impression that people don't even try to find an answer by themselves. -
@jsulm
i understand all the warnings but problem is i don't know how to fix those .i know this issues are small and silly to ask to help.but i have no other way. my app's co-developer is in off-line. i am a ui designer and newbie c++ developer .
thanks.