I know that for a type foo, the function declaration for bar
void bar(const foo*) and void bar(foo* const)
are the same thing. But that about double indirection? That is, are
void bar(const foo**) and void bar(foo** const)
also the same thing? If not, then what do I need to do to void bar(foo** const) to put the const first?
Here we consider
void bar(const foo*); #1
void bar(foo* const) #2
In #1 we've a pointer to a const foo while in #2 we've a const pointer to a nonconst foo.
You could use std::is_same to confirm that they're different:
std::cout << std::is_same<const foo*, foo* const>::value << ' '; //false
Here we consider
void bar(const foo**); #3
void bar(foo** const); #4
In #3 we've a pointer to a pointer to a const foo while in #4 we've a const pointer to a nonconst pointer to a nonconst foo.
std::cout << std::is_same<const foo**, foo** const>::value << ' '; //false
Moreover, note that const foo * is the same as foo const * but this case you don't have in your given examples.
std::cout << std::is_same<const foo *, foo const *>::value << ' '; //true
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With