Re: Zero values
cppquester@googlemail.com wrote:
I am forced to work with a
char* buf;
I allocate memory and then construct some
data types in buf (several different at different locations of buf
kind of struct alike)
Sometimes all data need to be zeroed.
For integral types that is fine, I just zero all
char within buf.
Q: What about float, double, complex,
can I assume that a bit pattern of only 0s
corresponds to zero values also for these types?
It is not guaranteed, but it may happen.
What about std::string?
Is all zero bit pattern an empty string?
No way.
If not in the standard, than at least "de-facto"?
Or for g++ on i386?
My program does not need to work on "exotic" systems and
just zeroing the char array saves lot of resources.
You can check yourself:
#include <iostream>
#include <string>
#include <cstring>
#include <iomanip>
#include <vector>
template < typename T >
void test_T ( void ) {
std::cout << std::dec << sizeof(T) << " ";
std::vector< unsigned char > buffer ( sizeof(T), 0 );
T t = T();
std::memcpy( &buffer[0], &t, sizeof(T) );
for ( std::vector< unsigned char >::const_iterator iter = buffer.begin();
iter != buffer.end(); ++iter ) {
std::cout << std::hex << std::setw(2) << std::setfill('0')
<< unsigned( *iter );
}
std::cout << '\n';
}
int main ( void ) {
test_T< float >();
test_T< double >();
test_T< long double >();
test_T< std::string >();
}
But note: Programming outside the guarantees of the standard is tricky and
requires careful code management. If you think it will be less work, you
are deluding yourself. In order to leave an acceptable situation for the
maintenance programmer who has to work on your code, you will need to
document all the steps outside the standard carefully, supply all the test
cases necessary to make sure that one will notice if the next compiler /
library update breaks something, and you have to document the rationale for
going outside the standard so that the decision can be revisited
periodically. All in all, it never saves labor when done properly (but
sometimes it is necessary, e.g., for performance reasons).
Best
Kai-Uwe Bux