passing POD by value with const qualifiers. Silly or not?

Andre Wöbbeking Woebbeking at kde.org
Wed Feb 20 07:56:59 GMT 2008


On Wednesday 20 February 2008 08:42:26 Thiago Macieira wrote:
> Andre Wöbbeking wrote:
> >On Wednesday 20 February 2008 06:04:24 Matt Rogers wrote:
> >> Hi,
> >>
> >> So, I've been doing some review of decibel and I've seen some stuff
> >> like this (from kdereview/decibel/src/server/contactmanager.h)
> >>
> >> Decibel::ChannelInfo
> >> contactContactUsingAccount(const uint contact_id, const int
> >> account_handle, const int type, const bool suppress_handler);
> >>
> >>
> >> Most of us know that passing POD by value with a const qualifier is
> >> kinda silly, since it has next to zero real effect.
>
> I agree with Stephan and Andre here. I'll even give you examples from Qt:
>
> src/xmlpatterns/api - headers do not include const unnecessarily
> src/xmlpatterns/*~api - const is used on PODs
> [That's a zsh extendedglob]
>
> >It makes sense in the implementation but not in the API. As compromise
> > we could remove the const in the header files but leave them in the
> > source files (that is allowed for PODs).
>
> No, it's not. Not only that, some compilers mangle the "const" as well, so
> removing it if it was there is binary incompatible.

I'm not speaking about BIC or BC.

> This applies as well to return types:
> 	const int foo();
>
> That generates a warning in gcc 4.3, but you can't remove it because it's
> binary incompatible in MSVC.

AFAIK it's OK to have parameters without const in the declaration and with 
const in the implementation. Not sure about return values.




More information about the kde-core-devel mailing list