HI
Would i be able to initialize an entire array by:-
int a[10] = 0
if not, how old be able to do it, would i have to use some form of loop
to set each individual element?
Dan 16 10567
John Dibling wrote: On Mon, 04 Aug 2003 19:15:59 +0100, Danny <da***********@ntlworld.com> wrote:
HI
Would i be able to initialize an entire array by:-
int a[10] = 0
if not, how old be able to do it, would i have to use some form of loop to set each individual element?
Dan
The code you have above will initialize the first element; all others will be uninitialized (eg, garbage). You can do this:
int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int a[10] = {0};
would be sufficient. or use a loop as you suggested.
HTH,
--ag
--
Artie Gold -- Austin, Texas
Danny wrote in news:3F**************@ntlworld.com: HI
Would i be able to initialize an entire array by:-
int a[10] = 0
int a[10] = {}; if not, how old be able to do it, would i have to use some form of loop to set each individual element?
The above initializer causes all of a's elements to be default
initialized, in the case of an int this means 0, so you get what
you want.
Note that:
int b[3] = { 1 };
is the same as
int b[3] = { 1, 0, 0 };
HTH
Rob.
-- http://www.victim-prime.dsl.pipex.com/
Artie Gold wrote: ... The code you have above will initialize the first element; all others will be uninitialized (eg, garbage). You can do this:
int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int a[10] = {0};
would be sufficient. ...
As Rob noted in his message, even
int a[10] = {};
would be sufficient.
--
Best regards,
Andrey Tarasevich
Brainbench C and C++ Programming MVP
On Mon, 04 Aug 2003 13:27:41 -0700, Andrey Tarasevich
<an**************@hotmail.com> wrote: Artie Gold wrote: ... The code you have above will initialize the first element; all others will be uninitialized (eg, garbage). You can do this:
int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int a[10] = {0};
would be sufficient. ...
As Rob noted in his message, even
int a[10] = {};
would be sufficient.
I don't think that's correct...
8.5.1.7 :
"If there are fewer initializers in the list than there are memvers in
the aggregate, then each member not explicitly initialized shall be
default initialized."
Doesn't this mean anything not explicitly initialized would be
uninitialized in this case?
</dib>
John Dibling
Witty banter omitted for your protection
"John Dibling" <dib@substitute_my_full_last_name_here.com> wrote... On Mon, 04 Aug 2003 13:27:41 -0700, Andrey Tarasevich <an**************@hotmail.com> wrote:
Artie Gold wrote: ... The code you have above will initialize the first element; all others will be uninitialized (eg, garbage). You can do this:
int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int a[10] = {0};
would be sufficient. ...
As Rob noted in his message, even
int a[10] = {};
would be sufficient.
I don't think that's correct...
8.5.1.7 :
"If there are fewer initializers in the list than there are memvers in the aggregate, then each member not explicitly initialized shall be default initialized."
Doesn't this mean anything not explicitly initialized would be uninitialized in this case?
Just scroll a few paragraphs back and read 8.5/5. For a POD to
default-initialise means to zero-initialise. 'int' is a POD.
Victor
John Dibling wrote: ... As Rob noted in his message, even
int a[10] = {};
would be sufficient. I don't think that's correct...
8.5.1.7 :
"If there are fewer initializers in the list than there are memvers in the aggregate, then each member not explicitly initialized shall be default initialized."
Actually, the above is exactly what makes the '{}' initializer
sufficient in this case. I don't see what in this quote makes you think
that the initialization is incorrect.
Doesn't this mean anything not explicitly initialized would be uninitialized in this case?
No, it means exactly what it says: everything not explicitly initialized
will be _default_ _initialized_. Default initialization for 'int's means
zero initialization. See a reference in Victor's message. Take a look at
8.5.1/8 as well.
--
Best regards,
Andrey Tarasevich
Brainbench C and C++ Programming MVP
> >> ... As Rob noted in his message, even
int a[10] = {};
would be sufficient.
I don't think that's correct...
8.5.1.7 :
"If there are fewer initializers in the list than there are memvers in the aggregate, then each member not explicitly initialized shall be default initialized."
Actually, the above is exactly what makes the '{}' initializer sufficient in this case. I don't see what in this quote makes you think that the initialization is incorrect.
Doesn't this mean anything not explicitly initialized would be uninitialized in this case?
No, it means exactly what it says: everything not explicitly initialized will be _default_ _initialized_. Default initialization for 'int's means zero initialization. See a reference in Victor's message. Take a look at 8.5.1/8 as well.
I noted your quote on a paragraph from some source:
8.5.1.7 :
"If there are fewer initializers in the list than there are memvers in
the aggregate, then each member not explicitly initialized shall be
default initialized."
which I assume to be some online C++ reference. Where can I view this for
myself?
Regards
WD
"Web Developer" <no****@hotmail.com> wrote in message
news:3f********@news.iprimus.com.au... > ... >As Rob noted in his message, even > > int a[10] = {}; > >would be sufficient.
I don't think that's correct...
8.5.1.7 :
"If there are fewer initializers in the list than there are memvers in the aggregate, then each member not explicitly initialized shall be default initialized."
Actually, the above is exactly what makes the '{}' initializer sufficient in this case. I don't see what in this quote makes you think that the initialization is incorrect.
Doesn't this mean anything not explicitly initialized would be uninitialized in this case?
No, it means exactly what it says: everything not explicitly initialized will be _default_ _initialized_. Default initialization for 'int's means zero initialization. See a reference in Victor's message. Take a look at 8.5.1/8 as well.
I noted your quote on a paragraph from some source:
8.5.1.7 :
"If there are fewer initializers in the list than there are memvers in the aggregate, then each member not explicitly initialized shall be default initialized."
which I assume to be some online C++ reference. Where can I view this for myself?
The C++ standard. http://www.zib.de/benger/C++/clause8.html#s8
Rob Williscroft <rt*@freenet.REMOVE.co.uk> wrote in message news:<Xn**********************************@195.129 .110.130>... Danny wrote in news:3F**************@ntlworld.com:
HI
Would i be able to initialize an entire array by:-
int a[10] = 0
int a[10] = {};
Thanks for the tip...I'd been using a bunch of loops to accomplish
same.
One question. If I have an array as part of a class, initializing to
zero using empty braces doesn't work. eg
class arrayholder{
int a[100] = {};
};
doesn't work. I have to use:
class arrayholder{
int a[100];
};
arrayholder::arrayholder(){
for(int i = 0; i<100; i++)
a[i] = 0;
}
and initialize it in the constructor. However, I'd like to do
something like:
a[] = {};
in the constructor. any ideas?
Thanks
On Tue, 5 Aug 2003 19:48:17 +0930, "Web Developer"
<no****@hotmail.com> wrote: which I assume to be some online C++ reference. Where can I view this for myself?
Regards WD
This is a reference to the ISO C++ standard document, which describes
the language in detail. AFAIK, there is no onlne location to view
this document; it is copyrighted material, and you must purchase a
copy. Here's one place where you can get one: http://webstore.ansi.org/ansidocstor...C+14882%2D1998
</dib>
John Dibling
Witty banter omitted for your protection
"J. Campbell" <ma**********@yahoo.com> wrote... Rob Williscroft <rt*@freenet.REMOVE.co.uk> wrote in message
news:<Xn**********************************@195.129 .110.130>... Danny wrote in news:3F**************@ntlworld.com:
HI
Would i be able to initialize an entire array by:-
int a[10] = 0
int a[10] = {};
Thanks for the tip...I'd been using a bunch of loops to accomplish same.
One question. If I have an array as part of a class, initializing to zero using empty braces doesn't work. eg
class arrayholder{ int a[100] = {}; };
doesn't work.
Of course it doesn't. You're not in Java any more. The class
definition can contain only _declarations_ of data members, with
a simple exception: a static const of integral type is allowed
to be initialised there.
I have to use:
class arrayholder{ int a[100]; };
arrayholder::arrayholder(){ for(int i = 0; i<100; i++) a[i] = 0; }
and initialize it in the constructor. However, I'd like to do something like: a[] = {};
in the constructor. any ideas?
Nope. That's the limitation of the language.
Victor
J. Campbell wrote:
<snip> One question. If I have an array as part of a class, initializing to zero using empty braces doesn't work. eg <snip>
However, I'd like to do something like: a[] = {};
in the constructor. any ideas?
Perhaps you should consider using a vector, for this and many other
reasons. (See the FAQ for comp.lang.c++ for more reasons.)
In your particular case, your code could look like this:
#include <vector>
class ArrayHolder
{
public:
ArrayHolder()
: d_v(10, 0)
{ /* no code needed for vector initialization */ }
private:
std::vector<int> d_v;
};
The vector constructor I used above will initialize the vector with 10 '0's.
I understand that you need to know how arrays work in C++, as you need
to understand the basics. However, STL containers are usually a better
choice than arrays in C++.
- Adam
J. Campbell wrote in
news:b9**************************@posting.google.c om: Rob Williscroft <rt*@freenet.REMOVE.co.uk> wrote in message news:<Xn**********************************@195.129 .110.130>... Danny wrote in news:3F**************@ntlworld.com:
> HI > > Would i be able to initialize an entire array by:- > > int a[10] = 0
int a[10] = {};
Thanks for the tip...I'd been using a bunch of loops to accomplish same.
One question. If I have an array as part of a class, initializing to zero using empty braces doesn't work. eg
class arrayholder{ int a[100] = {}; };
doesn't work. I have to use:
class arrayholder{ int a[100]; };
arrayholder::arrayholder(){ for(int i = 0; i<100; i++) a[i] = 0; }
and initialize it in the constructor. However, I'd like to do something like: a[] = {};
struct arrayHolderBase
{
int a[100];
};
class arrayHolder: arrayHolderBase
{
public:
arrayHolder() : arrayHolderBase() {}
};
The important part of the above is: "... : arrayHolderBase() { ..."
bit. This explicit call of the POD's (arrayHolderBase's) default
constructor causes the arrayHolderBase sub object of arrayHolder
to be defualt initialized (all fields/elements set to 0).
Just for fun I compiled the following:
#include <iostream>
struct arrayHolder
{
char a[100];
arrayHolder() : a() {}
};
void test()
{
arrayHolder a;
for (int i = 0; i < 100; ++i)
{
if (a.a[i])
{
std::cerr << "non 0 at " << i << "\n";
return;
}
}
}
void set()
{
arrayHolder a;
for (int i = 0; i < 100; ++i)
{
a.a[i] = i + 20;
}
}
int main()
{
set();
test();
std::cerr << "OK";
}
I fouund the results a bit suprising, No Errors/Warning's
(aka diagnostics) with any of the 3 compilers I tried.
g++ (gcc 3.2 MingW) : OK
msvc (7.1) : non 0 at 0 - OK
bcc32 (borland): non 0 at 0 - OK
I was really expecting (hopeing for) a diagnostic, BTW I used
-W -Wall -pedantic with g++.
I suspect all 3 compilers are conforming implementation's (in this
regard) of our beloved C++ Standard.
Rob.
-- http://www.victim-prime.dsl.pipex.com/
Rob Williscroft wrote: ... struct arrayHolderBase { int a[100]; };
class arrayHolder: arrayHolderBase {
public:
arrayHolder() : arrayHolderBase() {} };
The important part of the above is: "... : arrayHolderBase() { ..." bit. This explicit call of the POD's (arrayHolderBase's) default constructor causes the arrayHolderBase sub object of arrayHolder to be defualt initialized (all fields/elements set to 0).
Strictly speaking, in standard terminology the '... : arrayHolderBase()
{ ...' bit is not and explicit call to 'arrayHolderBase' constructor.
The '()' is just a form of member initializer which causes this member
to be default-initialized. No constructors are involved in this process.
Just for fun I compiled the following:
#include <iostream>
struct arrayHolder { char a[100]; arrayHolder() : a() {} };
void test() { arrayHolder a;
for (int i = 0; i < 100; ++i) { if (a.a[i]) { std::cerr << "non 0 at " << i << "\n"; return; } } }
void set() { arrayHolder a;
for (int i = 0; i < 100; ++i) { a.a[i] = i + 20; } }
int main() { set(); test(); std::cerr << "OK"; }
I fouund the results a bit suprising, No Errors/Warning's (aka diagnostics) with any of the 3 compilers I tried.
There shouldn't be any. The code is legal.
g++ (gcc 3.2 MingW) : OK msvc (7.1) : non 0 at 0 - OK bcc32 (borland): non 0 at 0 - OK
I was really expecting (hopeing for) a diagnostic, BTW I used -W -Wall -pedantic with g++.
I suspect all 3 compilers are conforming implementation's (in this regard) of our beloved C++ Standard.
No. Looks like only 'g++' was able to produce the correct result. The
'msvc' and 'bcc32' are not conforming in this respect. As for 'msvc',
this problem existed in version 6 as well.
--
Best regards,
Andrey Tarasevich
Brainbench C and C++ Programming MVP
Andrey Tarasevich wrote in news:3F**************@hotmail.com: struct arrayHolder { char a[100]; arrayHolder() : a() {} }; I fouund the results a bit suprising, No Errors/Warning's (aka diagnostics) with any of the 3 compilers I tried.
There shouldn't be any. The code is legal.
g++ (gcc 3.2 MingW) : OK msvc (7.1) : non 0 at 0 - OK bcc32 (borland): non 0 at 0 - OK
I was really expecting (hopeing for) a diagnostic, BTW I used -W -Wall -pedantic with g++.
I suspect all 3 compilers are conforming implementation's (in this regard) of our beloved C++ Standard.
No. Looks like only 'g++' was able to produce the correct result. The 'msvc' and 'bcc32' are not conforming in this respect. As for 'msvc', this problem existed in version 6 as well.
Thanks for the correction.
Rob.
-- http://www.victim-prime.dsl.pipex.com/
> > which I assume to be some online C++ reference. Where can I view this
for myself?
Regards WD
This is a reference to the ISO C++ standard document, which describes the language in detail. AFAIK, there is no onlne location to view this document; it is copyrighted material, and you must purchase a copy. Here's one place where you can get one:
http://webstore.ansi.org/ansidocstor...FISO%2FIEC+148
82%2D1998
What is the latest version for this document? version 1.0?
WD
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system ( http://www.grisoft.com).
Version: 6.0.504 / Virus Database: 302 - Release Date: 24/07/2003 This discussion thread is closed Replies have been disabled for this discussion. Similar topics
7 posts
views
Thread by Christopher Jeris |
last post: by
|
2 posts
views
Thread by Remi Bastide |
last post: by
|
7 posts
views
Thread by Michael |
last post: by
|
7 posts
views
Thread by Frank M. |
last post: by
|
18 posts
views
Thread by Vasileios Zografos |
last post: by
|
3 posts
views
Thread by Louis Caron |
last post: by
|
3 posts
views
Thread by mark.bergman |
last post: by
|
15 posts
views
Thread by jamx |
last post: by
|
14 posts
views
Thread by dan |
last post: by
|
31 posts
views
Thread by mdh |
last post: by
| | | | | | | | | | |