"static" question

P

Pat

I would like to know what is the meaning of :

static vector<int> v;

What is the difference with:

vector<int> v;
 
A

Alf P. Steinbach

* "Pat said:
I would like to know what is the meaning of :

static vector<int> v;

What is the difference with:

vector<int> v;

That depends on the context of the declaration.

If it is at namespace scope (outside any function or class) then 'static'
means that v has internal linkage, i.e., in practical terms, is not visible to
the linker outside the compilation unit.

If it is in a class or function then 'static' means that v has global
lifetime; for a class it is a single variable instead of a member variable in
each instance of the class; for a function it is a single variable instead of
an automatic variable created & destroyed for each call of the function.
 
P

Pat

Thanks, Alf.

Pat
Alf P. Steinbach said:
That depends on the context of the declaration.

If it is at namespace scope (outside any function or class) then 'static'
means that v has internal linkage, i.e., in practical terms, is not visible to
the linker outside the compilation unit.

If it is in a class or function then 'static' means that v has global
lifetime; for a class it is a single variable instead of a member variable in
each instance of the class; for a function it is a single variable instead of
an automatic variable created & destroyed for each call of the function.

--
A: Because it messes up the order in which people normally read text.
Q: Why is top-posting such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
 
F

Fraser Ross

Thats wrong. A static object of a class in a function will be constructed
only with the first call of the function and destructed only when the
program terminates although it might not be destructed with some abnormal
terminations.

Fraser.

"Alf P. Steinbach"
 
A

Alf P. Steinbach

[Do not top-post (I've rearranged this). Read the FAQ. Thanks in advance.]

* "Fraser Ross said:
* "Alf P. Steinbach"

Thats wrong.

That it's wrong turns out not to be the case.

A static object of a class in a function will be constructed
only with the first call of the function

Not exactly. It's constructed the first time execution passes through
the declaration. Which might not be at the first call of the function,
or indeed ever.

Consider and try out:


#include <iostream>

struct X
{
X() { std::cout << "X constructed" << std::endl; }
~X() { std::cout << "X destroyed" << std::endl; }
};

void foo( int n )
{
std::cout << "foo( " << n << " )" << std::endl;
if( n == 3 )
{
static X anX;
}
}

int main()
{
for( int i = 1; i <= 5; ++i ) { foo( i ); }
}

and destructed only when the
program terminates although it might not be destructed with some abnormal
terminations.

Right.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,780
Messages
2,569,611
Members
45,281
Latest member
Pedroaciny

Latest Threads

Top