Just want to clarify the whole "char" thing
I realise that none of the following types may contain padding bits, and
that all of their bits must take part in value representation:
signed char
unsigned char
(As "char" must map to one of the above, this also applies to "char".)
What I would like to clarify however, is the possiblity of a "signed char"
(and thus plain char) having an invalid value, or "trap value".
Below, I reproduce code which prints out an object's bytes by using an
"unsigned char". If I were to change it to "signed char" or plain char,
could the code potentially invoke undefined behaviour?
#include <ostream>
template<class T>
void PrintObjectBytes(T const &obj,std::ostream &os)
{
unsigned char const * const p_over =
reinterpret_cast<unsigned char const *>(&obj + 1);
unsigned char const *p =
reinterpret_cast<unsigned char const *>(&obj);
do os << (unsigned)*p++ << " ";
while(p != p_over);
os << '\n';
}
#include <iostream>
#include <vector>
int main()
{
std::vector<double> obj1;
int obj2[5] = {2,3,4,5,6};
PrintObjectBytes(obj1, std::cout);
PrintObjectBytes(obj2, std::cout);
}
--
Frederick Gotham
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]