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

时间:2009-03-23 00:50:22

标签: c++ variable-assignment terminology declare

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

8 个答案:

答案 0 :(得分:34)

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

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();

答案 1 :(得分:9)

定义和声明是相似的,但分配是非常不同的。

这里我宣布(或定义)一个变量:

int x;

这里我为该变量赋值:

x = 0;

我在这里做了两个声明:

int x = 0;

注意

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

<强> T-SQL

declare x int;
set x = 0;

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

<强>的Python

x = 0

答案 2 :(得分:5)

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

答案 3 :(得分:4)

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

例如c:

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

  • 同样,当你说出它是什么类型时,变量是声明,并且每个范围只发生一次。但您可以重复分配值。 (某些语言还区分初始化(在声明时为变量赋值)和赋值(稍后更改值)。)

答案 4 :(得分:2)

差异似乎很微妙,但它们很重要。并非每种语言都有相同的区别,但在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和definition合并为一个,但必须在程序中的任何位置调用函数之前执行此操作。

答案 5 :(得分:0)

一般职责: 定义=声明+保留空间。

定义,声明和赋值有两种情况:

  1. for Variables。
  2. for Functions。
  3. 变量

    - 定义:
    告诉编译器为变量保留内存。

    int x;
    

    - 声明:
    告诉编译器在其他地方定义的变量。

    extern int x;
    

    - 作业:
    告诉编译器将值放在变量中。

    x = 0;
    

    功能

    - 定义:

    int functionDef(int x){
      int x;  
      ...  
      ...  
      ...  
      return x;  
    }
    

    - 声明: 它只是函数的原型。

    int functionDef(int x);
    

答案 6 :(得分:-1)

正确答案取决于您所说的语言。计算机语言通常具有特定的术语,要么是因为语言规范,要么是围绕语言成长的社区。 COBOL,当我使用它时,它的术语与更主流的语言有很大不同(语言意义上更接近语言发展的主流,而不是主流业务)。 Forth开发了一些奇怪的术语。

如果你懂英语,你通常可以很好地了解一个词的正常含义是什么意思,但是从不指望它太多。跨语言或语言社区的特定词语也是如此。

答案 7 :(得分:-1)

这可能取决于语言,正如已经说过的那样。我认为这实际上取决于这些单词是否用于类。对于此处讨论的大多数数据类型,问题可能没有太大关联。在C ++中(参见c++ - What is the difference between a definition and a declaration?),类或结构总是只有一个定义,但可以声明零次或多次。没有定义就不能声明类。所以“声明”可能与“使用”同义。

在大多数语言中,简单类型(如整数)不需要按类的方式进行定义。