【问题标题】:What is the difference between a = 5, a(5), a{5} and a[5] in C++?C++ 中的 a = 5、a(5)、a{5} 和 a[5] 有什么区别?
【发布时间】:2020-05-03 05:18:35
【问题描述】:

C++中a = 5a(5)a{5}a[5]的语句有什么区别?

我偶尔会看到它们用于任何事情,例如在 C++ 程序中为对象赋值。它们的区别在哪里?

【问题讨论】:

  • 你为什么要发布一个你已经准备好、很长的答案的问题,而你只是在同一时间发布了这个问题?
  • @SparkFountain 为可能遇到该问题并对语法有疑问的任何人提供问答。

标签: c++ syntax initialization variable-assignment assignment-operator


【解决方案1】:

C++ 中的所有这些语句在初始化(在声明对象时完成)和赋值的上下文中存在一个主要区别;最后一条语句a[5] 与其他语句相比也是完全不同的。


前提:如果a是某个数据类型的对象,例如int,我们可以给a分配一个合适的值(根据声明的数据类型)。注意:该值可以由有效的表达式计算,例如a = 2 + 3; 的行为与a = 5; 相同。


  1. a = 5;

这是 C++ 程序中常用的赋值形式。它可以用于各自作用域中的初始化或以后的赋值(在声明a 之后)。如果a 被正确声明为int 类型,则此语句将5 的整数值分配给aint 变量a

可以直接通过声明使用:

int a = 5;

第一次赋值(a 在其声明中未初始化时):

int a;
// some code may exist between.
a = 5;

或在声明中第一次赋值或初始化之后在相应范围内的任何其他位置进行赋值(取决于存储类):

int a;          // declaration of `a`.
// some code may exist between.
a = 5;          // first assignment of `a` with the value of `5`.
// some code may exist between.
a = 7;          // assignment of the value of `7` to `a`.

  1. a(5);

此语句将aint 变量初始化为5。它只能在声明时显式初始化时使用

int a(5);

否则编译器很可能会抛出错误,因为它“认为”a 将是一个函数。

从技术上讲,a(5) 可以是一个函数,它将 5 的值作为参数通常很难,但它是 int 对象声明的上下文造成了不同之处。


  1. a{5};

同2。它用5的值初始化a只能在声明时的初始化中使用:

int a{5};

否则编译器会抛出错误。


注意:初始化 int a{5};int a(5) 之类的值仅是 C++ 功能。用这种方式在 C 中初始化对象是不可能的。


  1. a[5];

使用此语句,我们显然不会初始化或将5 的值分配给a 的变量。相反,我们定义了一个数组,一个对象簇,由5 对象组成,通过a 标识符表示为它自己的实体:

int a[5]; // declaration of `a` - `a` is an array of 5 int objects.

因此,我们这里没有单个对象,也没有为其分配任何值。

此外,我们必须区分数组的声明与:

int a[5];

以及后来访问数组a的某个int对象,如前面的例子:

a[4] = 12;

在这种情况下,a[4] 表示数组中的第 5th 对象,12 的值被分配给数组的第五个对象。

方括号内的数字,此处为4,称为索引号。请注意,索引号依次从0 开始。因此,a[0] 表示数组中的第一个对象,a[1] 表示第二个对象,依此类推。如果您将aint a[5]; 一起声明,则您不能以这种方式使用a[5],因为在这种情况下,它将代表第六个对象,该对象未在内存中为a 分配。

【讨论】:

  • a = 5; // initialization of a with the value of 5. 从技术上讲,这是一项任务。初始化必须是声明的一部分:int a = 5;
  • @AlgirdasPreidžius 我的目的是明确区分以便更好地理解。我会编辑它。
  • 我的目的是为了更好地理解而做出明确的区分。” 如果“区分”伴随着错误的陈述 - 这对理解没有帮助。
  • @AlgirdasPreidžius 对不起,我的错。
猜你喜欢
  • 1970-01-01
  • 2014-11-05
  • 2014-07-28
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多