Hi all. In short, is there any performance difference between:
float f = 10.0f;
int i = static_cast<int>(f);
and
float f = 10.0f;
int i = int(f);
I've been meaning to ask this for a while but just how fast is
static_cast? I had always assumed (without proof) that static_cast is
implemented as a template which just wraps a C/C++ style cast.But then
it the Josuttis book it says:
"The conversion is allowed only if a type conversion is defined"
Presumably then this test is done at compile time?
Also, if static_cast is just a wrapper around C/C++ casts then how does
it differ from reinterpret_cast? Maybe these things are compiler
dependant but any info is useful.
Thanks,
David 11 18053
Hi all. In short, is there any performance difference between:
float f = 10.0f;
int i = static_cast<int>(f);
and
float f = 10.0f;
int i = int(f);
No, because a "cast" is a compile-time concept -- not a runtime concept.
Both should produce identical machine code.
I've been meaning to ask this for a while but just how fast is
static_cast?
It doesn't have a speed.
I had always assumed (without proof) that static_cast is implemented as
a template which just wraps a C/C++ style cast.But then it the Josuttis
book it says:
"The conversion is allowed only if a type conversion is defined"
Presumably then this test is done at compile time?
Yes it is. Test it with a conforming compiler:
char *p = 0;
long i = static_cast<long>(p);
You should get a compiler error.
Also, if static_cast is just a wrapper around C/C++ casts then how does
it differ from reinterpret_cast? Maybe these things are compiler
dependant but any info is useful.
In the way I showed you above. There's a list of things which static_cast
WILL let you do, and others which it WON'T let you do. For the things it
won't let you do, you must use reinterpret_cast.
--
Frederick Gotham
Ok, thanks for the input. I'm keen to write correct code but don't want
to sacrifice speed if possible. Seems like I'm ok here :-D es*****@googlemail.com wrote:
Hi all. In short, is there any performance difference between:
float f = 10.0f;
int i = static_cast<int>(f);
and
float f = 10.0f;
int i = int(f);
I've been meaning to ask this for a while but just how fast is
static_cast? I had always assumed (without proof) that static_cast is
implemented as a template which just wraps a C/C++ style cast.But then
it the Josuttis book it says:
"The conversion is allowed only if a type conversion is defined"
Presumably then this test is done at compile time?
Also, if static_cast is just a wrapper around C/C++ casts then how does
it differ from reinterpret_cast? Maybe these things are compiler
dependant but any info is useful.
Thanks,
David
Frederick Gotham wrote:
No, because a "cast" is a compile-time concept -- not a runtime concept.
Not always, think about dynamic_cast. Someone can debate if is the same
concept of casting that the others cast, but his name in C++ is clear.
--
Salu2
Julián Albo wrote:
Frederick Gotham wrote:
>No, because a "cast" is a compile-time concept -- not a runtime concept.
Not always, think about dynamic_cast. Someone can debate if is the same
concept of casting that the others cast, but his name in C++ is clear.
A cast is something that exists in source code to tell the compiler to
do a conversion. Some conversions can be done implicitly, and others
will only be done if you tell the compiler with a cast. Some conversions
require runtime code, but that's independent of whether the conversion
requires a cast. In some circumstances, dynamic_cast does not require
modifying the pointer value. In some circumstances, static_cast does. In
some circumstances, initializing a pointer to base from a pointer to
derived (without a cast) modifies the pointer value; in some it does not.
--
-- Pete
Author of "The Standard C++ Library Extensions: a Tutorial and
Reference." For more information about this book, see www.petebecker.com/tr1book. es*****@googlemail.com wrote:
>
I've been meaning to ask this for a while but just how fast is
static_cast? I had always assumed (without proof) that static_cast is
implemented as a template which just wraps a C/C++ style cast.
static_cast is not a template. It's a keyword, and the compiler
generates whatever code is appropriate. The difference between
static_cast and a C-style cast is that there are some conversions that
you can do with a C-style cast that you can't do with a static_cast.
--
-- Pete
Author of "The Standard C++ Library Extensions: a Tutorial and
Reference." For more information about this book, see www.petebecker.com/tr1book.
Pete Becker wrote:
>>No, because a "cast" is a compile-time concept -- not a runtime concept.
Not always, think about dynamic_cast. Someone can debate if is the same concept of casting that the others cast, but his name in C++ is clear.
A cast is something that exists in source code to tell the compiler to
do a conversion. Some conversions can be done implicitly, and others
will only be done if you tell the compiler with a cast. Some conversions
require runtime code, but that's independent of whether the conversion
requires a cast. In some circumstances, dynamic_cast does not require
modifying the pointer value. In some circumstances, static_cast does. In
But the runtime nature of dynamic_cast is more relevant. With other casts
you essentially say "I know the conversion is valid". With dynamic_cast you
say "check at runtime if the conversion is possible".
--
Salu2
Julián Albo wrote:
Pete Becker wrote:
>>>No, because a "cast" is a compile-time concept -- not a runtime concept. Not always, think about dynamic_cast. Someone can debate if is the same concept of casting that the others cast, but his name in C++ is clear.
A cast is something that exists in source code to tell the compiler to do a conversion. Some conversions can be done implicitly, and others will only be done if you tell the compiler with a cast. Some conversions require runtime code, but that's independent of whether the conversion requires a cast. In some circumstances, dynamic_cast does not require modifying the pointer value. In some circumstances, static_cast does. In
But the runtime nature of dynamic_cast is more relevant. With other casts
you essentially say "I know the conversion is valid". With dynamic_cast you
say "check at runtime if the conversion is possible".
I just re-read what I wrote, and, unfortunately, left out something
important: sometimes a dynamic_cast does not require any runtime check.
Converting a pointer to T into a pointer to T, for a silly example. But
you can also use a dynamic_cast to convert a pointer to derived into a
pointer to base, and that needs only a compile-time check.
--
-- Pete
Author of "The Standard C++ Library Extensions: a Tutorial and
Reference." For more information about this book, see www.petebecker.com/tr1book.
Pete Becker wrote:
>>>>No, because a "cast" is a compile-time concept -- not a runtime concept. Not always, think about dynamic_cast. Someone can debate if is the same
(...)
important: sometimes a dynamic_cast does not require any runtime check.
Converting a pointer to T into a pointer to T, for a silly example. But
you can also use a dynamic_cast to convert a pointer to derived into a
pointer to base, and that needs only a compile-time check.
Yes, but the point in discussion was that a cast in C++ is not always a
compile time concept, and the facts you mention does not contradict it.
Maybe I loose some topic change?
--
Salu2
Julián Albo wrote:
Pete Becker wrote:
>>>>>No, because a "cast" is a compile-time concept -- not a runtime >concept. Not always, think about dynamic_cast. Someone can debate if is the same
(...)
>important: sometimes a dynamic_cast does not require any runtime check. Converting a pointer to T into a pointer to T, for a silly example. But you can also use a dynamic_cast to convert a pointer to derived into a pointer to base, and that needs only a compile-time check.
Yes, but the point in discussion was that a cast in C++ is not always a
compile time concept, and the facts you mention does not contradict it.
Maybe I loose some topic change?
A cast is something you write in your source code. A conversion is what
the compiler does in response, as well as in many situations where a
cast is not required. Conversions sometimes have runtime consequences,
regardless of whether they result from casts. Conflating "cast" with
"conversion" muddles things.
--
-- Pete
Author of "The Standard C++ Library Extensions: a Tutorial and
Reference." For more information about this book, see www.petebecker.com/tr1book. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: buds |
last post by:
Hi all,
Following is the assigment operator of a derived class
Derived& Derived::operator=(const Derived& inDerived)
{
//to assign to the base class object the following statement
...
|
by: Alexander Stippler |
last post by:
In some situations I can apply a C-style cast,
but no static_cast. I'm not quite sure about the
differences in such places. A little example:
template <typename T>
class Dummy {
public:...
|
by: Scott Brady Drummonds |
last post by:
Hi, everyone,
I've checked a couple of on-line resources and am unable to determine how
reinterpret_cast<> is different from static_cast<>. They both seem to
perform a compile-time casting of...
|
by: news.ir.com.au |
last post by:
Hi,
In the following code I get the compiler error:
error C2243: 'static_cast' : conversion from 'class B *' to 'class A *'
exists, but is inaccessible
I understand why I get this error and...
|
by: Steven T. Hatton |
last post by:
The code shown below is an example from the Coin3D documentation. I believe
the use of the C-style cast is safe under the circumstances, but from what
I've been exposed to (TC++PL(SE)), I would...
|
by: Rahul |
last post by:
Hi,
I have a
class A : public B {...member functions......data members};
and am doing the following
A *p=new A();
void *p=static_cast<void *>(p);
factory_instance->process(p);
|
by: Vincent RICHOMME |
last post by:
Is there any reason to use static_cast instead of old C syntax ?
Let's say I declare
GLfloat test = static_cast<GLfloat>(x);
or
GLfloat test = (GLfloat) x;
|
by: subramanian100in |
last post by:
when are the use of static_cast and const_cast essential ?
Stroustrup, in his book TC++PL(3rd edition) in page number 139
(in Section 6.5 Advice - ), has advised
"Avoid explicit type...
|
by: jason.cipriani |
last post by:
There have been some recent threads about casting pointers to and from
void* that have me rethinking some of my usual practices. I have a
couple of questions.
1. What is the purpose of C++'s...
|
by: DolphinDB |
last post by:
The formulas of 101 quantitative trading alphas used by WorldQuant were presented in the paper 101 Formulaic Alphas. However, some formulas are complex, leading to challenges in calculation.
Take...
|
by: ryjfgjl |
last post by:
ExcelToDatabase: batch import excel into database automatically...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: Vimpel783 |
last post by:
Hello!
Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
|
by: PapaRatzi |
last post by:
Hello,
I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
|
by: Defcon1945 |
last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
|
by: Shćllîpôpď 09 |
last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
|
by: Faith0G |
last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
| |