C++ 定义、声明和赋值到底是什么?
-
21-08-2019 - |
题
我倾向于交替使用“定义”、“声明”和“分配”这三个词,但这似乎会冒犯某些人。这合理吗?我应该只在第一次分配给变量时使用“声明”一词吗?或者还有比这更多的事情吗?
解决方案
定义并声明是类似的,但分配是非常不同的。
下面我声明(或限定)的变量:
int x;
下面我将值分配给该变量:
x = 0;
在这里,我在一条语句做既:
int x = 0;
注意强>
不是所有的语言都支持的声明和赋值在一个语句:
<强> T-SQL 强>
declare x int;
set x = 0;
一些语言需要你指定一个值在声明一个变量。此要求允许编译器或语言的解释器来推断变量类型:
<强>的Python 强>
x = 0
其他提示
一个定义是其中所描述的值或功能,即,编译器或程序员被告知正是它是,e.g。
int foo()
{
return 1;
}
int var; // or, e.g. int var = 5; but this is clearer.
一个声明告诉编译器,或程序员该函数或变量存在。 e.g。
int foo();
extern int var;
赋值是当一个变量的值都设置,通常与=运算符。 e.g。
a = b;
a = foo();
这是使用正确的术语重要的,否则人们就不会知道你在说什么,或者错误地认为你不知道你在说什么。
这些术语在各种语言的标准中通常具有精确的含义。在这种情况下,不应将它们混为一谈。
以c为例:
一个函数可能是 定义的 仅一次(当你说出它的作用时),但也可能是 宣布 在此之前(当你说出它需要什么参数以及它返回什么类型时)。
同样一个变量是 宣布 当你说出它是什么类型时,每个作用域只发生一次。但你可能 分配 重复一个值。(有些语言还区分 初始化 (在声明时给变量赋值)和 任务 (稍后更改该值)。)
的差异似乎微妙,但它们是非常重要的。不是每一个语言使得同样的区分,但在C ++中的变量声明强>使得编译器知道的变量的类型和名称
int i;
一个的变量定义强>分配存储,并指定为变量的初始值。
i = 1;
您可以在变量声明和定义合并为一个语句,通常完成。
int x = 1;
声明一个函数内的变量也将拨出存储为变量,所以下面的代码可变a
隐式地定义作为其声明的一部分。
int main()
{
int a;
return 0;
}
由于可变a
是由编译器自动定义的,它将包含任何值是在已分配给它的存储位置。这就是为什么它是不是安全使用自动变量,直到你明确分配已知值给他们。
这是分配发生地更改程序中的一个变量的值的任何时间。
x = 2;
x++;
x += 4;
一个的函数声明下,类似于变量声明,使得编译器知道的函数签名。这可以让你调用一个函数在你的源代码之前,而不会导致编译器错误定义。
int doSomething(float x);
一个的函数定义强>指定返回类型,名称,参数列表,和说明的功能。这些元素的前三个必须在函数声明相匹配。的函数必须只在一个给定的程序定义一次。
int doSomething(float x)
{
if( x < 0 )
{
x = -x;
}
return static_cast<int>(x);
}
您可以将功能decalartion和定义合并成一个,但你必须这样做之前,该功能在你的程序的任何地方调用。
一般角色:定义=声明+保留空间。
定义、声明、赋值有两种情况:
- 对于变量。
- 对于函数。
为了 变量:
-- 定义:
告诉编译器为变量保留内存。
int x;
-- 宣言:
告诉编译器该变量在其他地方定义。
extern int x;
-- 任务:
告诉编译器将值放入变量中。
x = 0;
为了 功能:
-- 定义:
int functionDef(int x){
int x;
...
...
...
return x;
}
-- 宣言:这只是函数的原型。
int functionDef(int x);
在正确的答案取决于你在谈论的语言。计算机语言往往有特定的术语,或者是因为语言规范或周围的语言成长起来的社区。 COBOL,回来时,我用它,有很多不同的术语超过主流语言(在接近的语言发展,而不是主流商务的主流语言的意义上)。所述开发了一些奇怪的术语。
如果你懂英语,你通常可以得到一个不错的主意,以什么词从它的正常含义是指,但它从来没有指望太多。同样是用不同的语言或语言的社区特定词语真。
这可能取决于语言,正如人们所说的。我认为这真的取决于是否被用于诸如类的话。对于大多数这里讨论的数据类型,问题可能不会有太大的相关性。在C ++(见 C ++ - 是什么之间的区别定义和声明?),一类或结构总是有一个精确的定义,但可以声明零次或多次。一个类不能没有一个定义上声明。因此,“声明”可能与“拿来主义”的代名词。
在大多数语言,简单的类型,如整数不需要的类做的方式定义