Reputation: 6588
For what I know, C++ defines map<a,b>::value_type
as pair<const a,b>
What will happen if I use a pointer type as key type in map, i.e., is
std::map<const char*,int>::value_type::first_type = const char*
as I would expect from definition above or
std::map<const char*,int>::value_type::first_type = const char* const
as would be more logical (since otherwise i would be allowed to change key value from a map iterator)?
Upvotes: 11
Views: 1858
Reputation: 208323
Your reasoning is correct, value_type::first
would be char const * const
.
There is a common source of confusion in thinking that const T
when T
is a type *
is const type *
, but that is not so. Unlike macros, typedef
s are not text substitution, nor are template arguments. When you do const T
, if T
is a typedef
or template argument, you are adding a const
to the type as a whole.
That is the one reason why I like to write my const
s at the right of the type, as it causes less confusion: T const *
, add an extra const, get T const * const
.
Upvotes: 11
Reputation: 74340
You are correct in your assessment, but you have to be very careful with this approach for two reasons:
Upvotes: 0