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

C++ 究竟什么是C++;定义、声明和赋值?,c++,variable-assignment,terminology,declare,C++,Variable Assignment,Terminology,Declare,我倾向于交替使用define、declare和assign这些词,但这似乎会冒犯一些人。这是否合理?我应该只在第一次分配给变量时使用declare这个词吗?或者还有更多吗?定义和声明是相似的,但分配是非常不同的 这里我声明(或定义)一个变量: int x; x = 0; 在这里,我为该变量赋值: int x; x = 0; 在这里,我在一份声明中做到了这两个方面: int x = 0; 注意 并非所有语言都支持在一条语句中声明和赋值: int x = 0; T-SQL declare

我倾向于交替使用define、declare和assign这些词,但这似乎会冒犯一些人。这是否合理?我应该只在第一次分配给变量时使用declare这个词吗?或者还有更多吗?

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

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

int x;
x = 0;
在这里,我为该变量赋值:

int x;
x = 0;
在这里,我在一份声明中做到了这两个方面:

int x = 0;
注意

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

int x = 0;
T-SQL

declare x int;
set x = 0;
有些语言要求在声明时为变量赋值。此要求允许语言的编译器或解释器推断变量的类型:

int x;
x = 0;
Python

x = 0

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

例如,在c中:

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

  • 同样,当您说出一个变量是什么类型时,就会声明它,并且对于每个作用域,这种情况只发生一次。但您可以重复指定一个值。(有些语言还区分初始化(在声明时给变量一个值)和赋值(以后更改值)。)


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

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

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++中,<>强>变量声明< /强>使编译器的名称和类型的名称为编译器

int i;
变量定义分配存储并指定变量的初始值

i = 1;
int x;
您可以像通常所做的那样,将变量声明和定义合并到一个语句中

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);
}
int doSomething(浮点x)
{
if(x<0)
{
x=-x;
}
返回静态_-cast(x);
}

您可以将函数decartion和definition合并为一个函数,但必须在程序中任何地方调用该函数之前这样做。

正确答案取决于您所说的语言。计算机语言通常有特定的术语,要么是因为语言规范,要么是因为语言周围的社区。当我使用COBOL时,COBOL的术语与其他主流语言有很大不同(从更接近语言开发主流而非主流业务的角度来看)。福思发展了一些奇怪的术语

x = 2;
x++;
x += 4;

如果你懂英语,你通常可以从一个词的正常意义上了解它的意思,但千万不要过分依赖它。跨语言或语言社区的特定单词也是如此。

正如前面所说,这可能取决于语言。我认为这真的取决于这些词是否用于课堂之类的事情。对于这里讨论的大多数数据类型,这个问题可能没有太大的相关性。在C++中,一个类或结构总是有一个精确的定义,但是可以声明为零或更多次。没有定义就不能声明类。所以“声明”可能是“使用”的同义词

在大多数语言中,简单类型(如整数)不需要像类那样的定义。

常规角色: 定义=声明+保留空间。

定义、声明和分配有两种情况:

  • 对于变量
  • 功能

  • 对于变量

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

    i = 1;
    
    int x;
    
    --声明:
    告诉编译器该变量是在其他地方定义的

    extern int x;
    
    --作业:
    告诉编译器将值放入变量中

    x = 0;
    

    对于功能

    --定义:

    int functionDef(int x){
      int x;  
      ...  
      ...  
      ...  
      return x;  
    }
    
    --声明: 它只是函数的原型

    int functionDef(int x);
    
    我要说的是,Python没有任何形式的“声明”。类和函数是“定义的”,变量是在赋值时创建的。你并不真正“声明”变量,因为它们只是assi的名字