通常,我们并不把局部对象定义为静态的或者外部的,而是将它定义为自动的和寄存器的。函数的自变量都是自动存储,这种存储方式被称作栈存储。下面的例子包括了多种声明对象的方式、自动存储方式的各种形式。
//s' storage type s is determined by the caller
void f(const std::string & s);
//arguments passed by value are automatic
void g(register int n);
int main()
{
int n; // automatic because local, non-static,
non-extern
register inti; // register implies
automatic
auto double d; // auto implies automatic
g(n); //passing a copy of n; the copy is automatic
std::string s;
f(std::string temp()); // a temp object is also
automatic
}
自动对象通常被建立在一个函数或者一个块中,当函数或块结束时,自动对象就被立即销毁。因而,当它每次进入一个函数或块的时候,自动对象将会创建一个全新的设置,自动变量和无类对象的缺省值是不定的。