Possible Duplicate:
casting unused return values to void
I read some source code, and in it many virtual functions in the interface classes are declared and default-implemented as such:
virtual bool FunctionName(TypeName* pointer)
{
(void)pointer;
return true;
}
May I ask what is the purpose of casting the pointer to void in the default implementation?
Multiple purposes depending on what you cast
- Marking your intention to the compiler that an expression that is entirely a no-op is intended as written (for inhibiting warnings, for example)
- Marking your intention to to the compiler and programmer that the result of something is ignored (the result of a function call, for example)
- In a function template, if a return type is given by a template parameter type
T
, and you return the result of some function call that could be different fromT
in some situation. An explicit cast toT
could, in thevoid
case, prevent a compile time error:
int f() { return 0; } void g() { return (void)f(); }
- Inhibiting the compiler to choose a comma operator overload (
(void)a, b
will never invoke an overloaded comma operator function).
Note that the Standard guarantees that there will never be an operator void()
called if you cast a class object to void
(some GCC versions ignore that rule, though).
In this case it's just to avoid compiler's warning about unused parameter.
Possible Duplicate:
casting unused return values to void
I read some source code, and in it many virtual functions in the interface classes are declared and default-implemented as such:
virtual bool FunctionName(TypeName* pointer)
{
(void)pointer;
return true;
}
May I ask what is the purpose of casting the pointer to void in the default implementation?
Multiple purposes depending on what you cast
- Marking your intention to the compiler that an expression that is entirely a no-op is intended as written (for inhibiting warnings, for example)
- Marking your intention to to the compiler and programmer that the result of something is ignored (the result of a function call, for example)
- In a function template, if a return type is given by a template parameter type
T
, and you return the result of some function call that could be different fromT
in some situation. An explicit cast toT
could, in thevoid
case, prevent a compile time error:
int f() { return 0; } void g() { return (void)f(); }
- Inhibiting the compiler to choose a comma operator overload (
(void)a, b
will never invoke an overloaded comma operator function).
Note that the Standard guarantees that there will never be an operator void()
called if you cast a class object to void
(some GCC versions ignore that rule, though).
In this case it's just to avoid compiler's warning about unused parameter.
0 commentaires:
Enregistrer un commentaire