11

Can someone explain what happens when size_t, or any other type identifier, is wrapped in parentheses. I know it is the old typecast syntax but in this context I don't follow what is happening.

I've seen it for defining the max size of a type as:

size_t max_size = (size_t)-1
jterm
  • 943
  • 1
  • 12
  • 31

3 Answers3

13

This code (unnecessarily) casts -1 to size_t. The most probable intent was getting the largest possible value of size_t on this system.

Although this code doesn't have Undefined Behavior, this code is ugly - in C++ you should use std::numeric_limits<size_t>::max() and in C use SIZE_MAX macro for exactly a purpose of getting the largest size_t value.

Drew Dormann
  • 54,920
  • 13
  • 119
  • 171
sasha.sochka
  • 13,747
  • 10
  • 43
  • 65
  • 3
    This code has well-defined behaviour. You might not like it, but it's sanctioned by the standard. (Both C and C++ standards, in fact.) And in C++ (the OP tag), you should use `std::numeric_limits::max()` – rici Oct 08 '13 at 01:10
1

(size_t)-1 is in fact the equivalent of size_t(-1)

See also the following question c cast syntax styles

Community
  • 1
  • 1
Rod
  • 48,232
  • 3
  • 34
  • 52
0

Some library methods intentionally return (size_t)(-1) to indicate an error condition. For example, the iconv method from the GNU libiconv library. I assume there is some good reason why these functions don't return ssize_t (signed) return values, which would allow you to check for -1 directly.

MikeOnline
  • 751
  • 8
  • 15
  • You wouldn't want to dedicate 16 bit only for the negative error codes. –  Sep 09 '19 at 14:39