Records
Functions
-
int StrLength (const char * string)Defined at line 181 of file ../../third_party/double-conversion/double-conversion/utils.h
-
template <class Dest, class Source>Dest BitCast (const Source & source)The type-based aliasing rule allows the compiler to assume that pointers of
different types (for some definition of different) never alias each other.
Thus the following code does not work:
float f = foo();
int fbits = *(int*)(
&f
);
The compiler 'knows' that the int pointer can't refer to f since the types
don't match, so the compiler may cache f in a register, leaving random data
in fbits. Using C++ style casts makes no difference, however a pointer to
char data is assumed to alias any other pointer. This is the 'memcpy
exception'.
Bit_cast uses the memcpy exception to move the bits from a variable of one
type of a variable of another type. Of course the end result is likely to
be implementation dependent. Most compilers (gcc-4.2 and MSVC 2005)
will completely optimize BitCast away.
There is an additional use for BitCast.
Recent gccs will warn when they see casts that may result in breakage due to
the type-based aliasing rule. If you have checked that there is no breakage
you can use BitCast to cast one pointer type to another. This confuses gcc
enough that it can no longer see that you have cast one pointer type to
another thus avoiding the warning.
Defined at line 335 of file ../../third_party/double-conversion/double-conversion/utils.h
-
template <class Destclass Source>Dest BitCast (Source * source)Defined at line 352 of file ../../third_party/double-conversion/double-conversion/utils.h