究竟什么是C++定义,声明和赋值?

13 c++ terminology variable-assignment declare

我倾向于使用单词define,declare和assign可互换,但这似乎会导致一些人的冒犯.这是否合理?我是否应该仅在第一次使用"声明"一词时分配给变量?或者还有更多呢?

jhe*_*iko 34

定义是描述值或函数的地方,即编译器或程序员被准确地告知它是什么,例如

int foo()
{
  return 1;
}

int var; // or, e.g. int var = 5; but this is clearer.
Run Code Online (Sandbox Code Playgroud)

声明告诉编译器或程序员函数或变量存在.例如

int foo();
extern int var;
Run Code Online (Sandbox Code Playgroud)

赋值是指变量的值设置,通常使用=运算符.例如

a = b;
a = foo();
Run Code Online (Sandbox Code Playgroud)

  • 其实我会考虑"int var;" 定义,"int var = 5;" 是一个组合的def/ass.基本上,在C中,定义是为对象创建空间的任何东西.无论如何,我会支持,也许你会改变答案,也许不会,但这是迄今为止最好的答案. (2认同)

And*_*are 9

定义和声明是相似的,但赋值是非常不同的.

在这里,我声明(或定义)一个变量:

int x;
Run Code Online (Sandbox Code Playgroud)

我在这里为该变量赋值:

x = 0;
Run Code Online (Sandbox Code Playgroud)

在这里,我在一个声明中做两件事:

int x = 0;
Run Code Online (Sandbox Code Playgroud)

注意

并非所有语言都在一个声明中支持声明和赋值:

T-SQL

declare x int;
set x = 0;
Run Code Online (Sandbox Code Playgroud)

某些语言要求您在声明时为变量赋值.此要求允许语言的编译器或解释器推断变量的类型:

蟒蛇

x = 0
Run Code Online (Sandbox Code Playgroud)

  • -1表示接受的答案是错误的:声明和定义_not_都是相似的(即使在某些语言中没有区别).请参阅下面的jheriko的答案. (2认同)

dmc*_*kee 5

这些术语在各种语言的标准中通常具有精确的含义。在这种情况下,不应将它们混为一谈。

以c为例:

  • 一个函数可能只定义一次(当你说出它的作用时),但它也可以在此之前声明(当你说出它接受什么参数以及它返回什么类型时)。

  • 同样,当您说出变量的类型时,就会声明该变量,并且每个作用域仅发生一次。但您可以重复赋值。(某些语言还区分初始化(在声明时为变量赋予值)和赋值(稍后更改值)。)


180*_*ION 5

使用正确的术语很重要,否则人们不会知道你在说什么,或者错误地认为你不知道你在说什么.