string::size_type
It might be logical to expect that size returns an int, or, thinking back to the note on page
38, an unsigned. Instead, the size operation returns a value of type string::size_type. This
type requires a bit of explanation.
The string classand many other library typesdefines several companion types. These
companion types make it possible to use the library types in a machine-independent
manner. The type size_type is one of these companion types. It is defined as a synonym
for an unsigned typeeither unsigned int or unsigned longthat is guaranteed to be big
enough to hold the size of any string. To use the size_type defined by string, we use the
scope operator to say that the name size_type is defined in the string class.
Any variable used to store the result from the string size operation ought
to be of type string::size_type. It is particularly important not to assign
the return from size to an int.
Although we don't know the precise type of string::size_type, wedo know that it is an
unsigned type (Section 2.1.1, p. 34). We also know that for a given type, the unsigned
version can hold a positive value twice as large as the corresponding signed type can hold.
This fact implies that the largest string could be twice as large as the size an int can hold.
Another problem with using an int is that on some machines the size of an int is too small
to hold the size of even plausibly large strings. For example, if a machine has 16-bit ints,
then the largest string an int could represent would have 32,767 characters. A string that
held the contents of a file could easily exceed this size. The safest way to hold the size of
a string is to use the type the library defines for this purpose, which is string::size_type.
It might be logical to expect that size returns an int, or, thinking back to the note on page
38, an unsigned. Instead, the size operation returns a value of type string::size_type. This
type requires a bit of explanation.
The string classand many other library typesdefines several companion types. These
companion types make it possible to use the library types in a machine-independent
manner. The type size_type is one of these companion types. It is defined as a synonym
for an unsigned typeeither unsigned int or unsigned longthat is guaranteed to be big
enough to hold the size of any string. To use the size_type defined by string, we use the
scope operator to say that the name size_type is defined in the string class.
Any variable used to store the result from the string size operation ought
to be of type string::size_type. It is particularly important not to assign
the return from size to an int.
Although we don't know the precise type of string::size_type, wedo know that it is an
unsigned type (Section 2.1.1, p. 34). We also know that for a given type, the unsigned
version can hold a positive value twice as large as the corresponding signed type can hold.
This fact implies that the largest string could be twice as large as the size an int can hold.
Another problem with using an int is that on some machines the size of an int is too small
to hold the size of even plausibly large strings. For example, if a machine has 16-bit ints,
then the largest string an int could represent would have 32,767 characters. A string that
held the contents of a file could easily exceed this size. The safest way to hold the size of
a string is to use the type the library defines for this purpose, which is string::size_type.
Comments
Post a Comment
https://gengwg.blogspot.com/