Re: Need user-defined constructor for creating const objects?
On 6/13/07 4:47 PM, in article
1181772256.084812.289660@a26g2000pre.googlegroups.com, "jpalecek@web.de"
<jpalecek@web.de> wrote:
I'm sorry, but you (or I) don't understand. Sure, the object will be
initialized by its default constructor, the question is, why the
implicit
(or what's it called) default constructor won't do.
Like in:
class A
{
string s;
};
class B
{
string s;
public:
B() {}
};
const A a;
const B b;
The classes are essentially the same, but A fails to comply with the
"shall" requirement.
No, the above program is fully compliant with the C++ Standard. As it turns
out, class "A" is an aggregate (because it has no user-declared constructor,
no virtual methods, no base class, and no private or protected data
members). Furthermore, since A contains a data member that has a
user-declared constructor (its std::string "s" data member), the
initialization of A is covered by ?12.1 (and not by the text in ?8.5 that
was originally quoted).
?12.1 informs us that an object such as A (whether const-qualified or not)
declared without an initializer is default-initialized. And in fact, every
C++ compiler I tested (g++ 4.0, VS 8, EDG C++, Comeau) accepted the above
program without complaint.
Greg
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]