阅读816 返回首页    go 阿里云 go 技术社区[云栖]


变量的内存存放与作用域

1.变量的声明、定义、初始化

一个程序可由多个源文件实现。

变量可以多次声明,但只能被定义一次。

声明通过extern关键字实现。

extern int i;  //声明

int j;   //定义

2.变量的内存存放

全局变量与局部变量在没有初始化时,取初值的方式不同。前者是全0.

c++内存分为代码常量全局//静态存储区。

不同变量的存储位置:

全局/静态存储区——全局变量,static变量;

栈——局部变量、函数调用时的参数。栈的容量一般比较有限;

堆——new运算符分配,需由delete释放;若分配失败,new返回NULL,记得安全性检查。

常量存储区——这是一块比较特殊的存储区,里面存放的是常量。

3.标示符的作用域

 for(int i=0;i<10;i++){//i仅在这里和for小括号内有效} 

c++中大多数作用域都以大括号分隔。

:: 类的作用域分辨符

#include<iostream>
using namespace std;
void show(){cout<<"hello";}
class A{
public:
		static void show(){cout<<"hi ";}
		static void fun(){
			show();  //成员函数
			::show(); //全局函数
		}

};
int main(int argc, char** argv)
{
	A::fun();
	return 0;
}
/*hi hello*/


4.内联函数

函数的调用是有开销的。比如:保存CPU环境、实参到形参的传递、函数执行完返回、恢复CPU环境。而使用inline函数可以达到空间换时间的效果。它告诉编译器把此函数插入到调用的地方去。

关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。 

如下风格的函数Foo 不能成为内联函数: 

inline void Foo(int x, int y); // inline 仅与函数声明放在一起 

void Foo(int x, int y){} 

 

而如下风格的函数Foo 则成为内联函数: 

void Foo(int x, int y); 

inline void Foo(int x, int y) // inline 与函数定义体放在一起{} 

所以说,inline 是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。


 

最后更新:2017-04-03 12:55:42

  上一篇:go 数据类型、表达式 类型转换
  下一篇:go html5关键词相关整理