我总是对“定义变量”概念感到困惑。定义是什么意思?
例如:
void main {
map<int,int> *infoMap;
if() {
//some check here,if it passes this check, then new infoMap
}
infoMap = new infoMap;
}
也是如此
map<int,int> *infoMap;
或
map<int,int> *infoMap = new inforMap;
定义变量?
答案 0 :(得分:6)
最上面的是声明,或者如果您愿意,定义。这里,编译器为变量分配空间。
最下面一个是作业。这里,编译器填充它在定义时分配的空间。如果要将变量的值更改为其他值,则可以有多个赋值。
答案 1 :(得分:5)
这是一个随机的,不完整的插图:
class Foo; // (incomplete forward) class declaration
class Foo { // class definition
int a; // member declaration + definition
int b(int, int); // member function declaration
static int c; // static member declaration
};
int Foo::b(int a, int b) { return a+b; } // member function definition
int Foo::c; // static member defintion
int bar(int); // free function declaration
int main() { // free function declaration + definition
int q; // declaration + definition
q = bar(0);
return q;
}
int bar(int a) { return 2 * a; } // free function definition
也许“静态成员定义”在某种意义上是唯一的,它为已在其他地方声明的对象提供了一个实际的对象实例(即分配加构造)。这只能与纯粹的外部宣言相媲美:
extern int N; // declaration only, no definition
不要与具有外部可见性的声明+定义相混淆:
extern const int M = 11; // declaration and definition
答案 2 :(得分:2)
map<int,int> *infoMap;
infoMap
是声明。通常当初始化与声明一起时,它被称为定义变量。
答案 3 :(得分:2)
在C ++中定义某些内容是将标识符(在本例中是指向map<int, int>
的指针)绑定到某个存储,而不是仅将标识符绑定到类型并且不分配存储的声明。如果编译器不需要任何关于类型定义的信息(即它只需要类型),那么你只需要声明即可。否则你需要一个定义。
答案 4 :(得分:1)
使用变量define和declare往往可以互换使用。但是有一个微妙的区别。
在大多数情况下,您实际上是在定义变量。
map<int,int> *infoMap;
术语“定义”声明一个符号,并赋予它物质,变量的存储空间,结构/类体,函数实现。
在某些情况下,您可以使用extern
关键字“声明”变量。这基本上通知编译器符号名称及其类型的存在,但不为其分配空间。该空间分配在实际定义变量的其他位置。
// foo.c
extern int bar;
// bar.c
int bar;
答案 5 :(得分:0)
在c ++中声明变量时,为内存保留空间,但不写入内存。该声明发生在
中map<int,int> *infoMap;
它可能包含任何内容。定义变量时,实际上将其设置为某个值,在本例中为新的infoMap。