C++字面值常量和运算符

字面值和运算符是像C++这样的编程语言中的基本元素。它们在代码中表达和操作数据起着至关重要的作用。在本简介中,我们将探讨字面值和运算符是什么,以及它们在C++中如何工作。

字面值

考虑以下两个语句:

std::cout << "Hello world!";
int x { 5 };

‘”Hello world!”’ 和 ‘5’ 是什么?它们是字面值。字面值(也称为字面常量)是直接插入源代码中的固定值。

字面值和变量都有一个值(和一个类型)。与变量不同(变量的值可以通过初始化和赋值来设置和更改),字面值的值是固定的(5永远是5)。这就是为什么字面值被称为常量的原因。

为了进一步突出字面值和变量之间的区别,让我们来看一下这个简短的程序:

#include <iostream>

int main()
{
    std::cout << 5 << '\n'; // 打印字面值的值

    int x { 5 };
    std::cout << x << '\n'; // 打印变量的值
    return 0;
}

在第5行,我们将值5打印到控制台。当编译器编译这段代码时,它将生成代码,导致std::cout打印值5。这个值5被编译到可执行文件中,可以直接使用。

在第7行,我们创建了一个名为x的变量,并将其初始化为值5。编译器将生成代码,将字面值5复制到分配给x的内存位置。在第8行,当我们打印x时,编译器将生成代码,导致std::cout打印x的内存位置的值(该值为5)。

因此,两个输出语句都执行相同的操作(打印值5)。但在字面值的情况下,值5可以直接打印。在变量的情况下,值5必须从变量表示的内存中提取。

这也解释了为什么字面值是常量而变量可以更改。字面值的值直接放在可执行文件中,而可执行文件在创建后无法更改。变量的值放在内存中,而内存的值可以在可执行文件运行时更改。

运算符

在数学中,运算是涉及零个或多个输入值(称为操作数)并产生新值(称为输出值)的数学过程。要执行的具体操作由称为运算符的符号表示。

例如,小时候我们都知道2 + 3等于5。在本例中,字面值23是操作数,符号+是运算符,告诉我们对操作数应用数学加法以产生新值5

在 C++ 中,操作按照您的预期进行。例如:

#include <iostream>

int main()
{
    std::cout << 1 + 2 << '\n';

    return 0;
}

在此程序中,字面值12是加号 ( +) 运算符的操作数,它生成输出值3。然后将该输出值打印到控制台。在 C++ 中,操作的输出值通常称为返回值

您可能已经非常熟悉数学中常见的标准算术运算符,包括加法 ( +)、减法 ( -)、乘法 ( *) 和除法 ( /)。在 C++ 中,赋值 ( =) 也是一个运算符,插入 ( <<)、提取 ( >>) 和相等 ( ==) 也是运算符。虽然大多数运算符都有名称符号(例如+、 或==),但也有许多运算符是关键字(例如newdelete、 和throw)。

C++ 中的运算符有四种不同的类型:

一元运算符作用于一个操作数。一元运算符的一个例子是-运算符。例如,给定-5,operator-获取字面操作数5并翻转其符号以产生新的输出值-5

二元运算符作用于两个操作数(通常称为leftright,因为左操作数出现在运算符的左侧,右操作数出现在运算符的右侧)。二元运算符的一个例子是+运算符。例如,给定3 + 4operator+采用左操作数3和右操作数4并应用数学加法来产生新的输出值7。插入 ( <<) 和提取 ( >>) 运算符是二元运算符,std::cout 或 std::cin 在左侧,要输出的值或要输入的变量在右侧。

三元运算符作用于三个操作数。C++ 中只有其中一种(条件运算符),我们稍后会介绍。

零元运算符作用于零操作数。C++ 中也只有其中之一(抛出运算符),我们稍后也会介绍。

请注意,某些运算符具有多种含义,具体取决于它们的使用方式。例如,operator-有两个上下文。它可以以一元形式使用来反转数字的符号(例如转换5-5,反之亦然),也可以以二进制形式使用来进行减法(例如4 - 3)。

运算符执行顺序

运算符可以链接在一起,使一个运算符的输出可以作为另一个运算符的输入。例如,给定以下表达式:2 * 3 + 4,乘法运算符首先执行,将左操作数2和右操作数3转换为返回值6(它成为加法运算符的左操作数)。接下来,加法运算符执行,并将左操作数6和右操作数4转换为新值10。

我们将在深入研究运算符主题时更多地讨论运算符执行的顺序。目前,只需知道算术运算符的执行顺序与标准数学中的执行顺序相同:首先是括号,然后是指数,然后是乘法和除法,最后是加法和减法。

返回值和副作用

大多数C++运算符仅使用其操作数来计算返回值。例如,-5产生返回值-5,2 + 3产生返回值5。有一些运算符不产生返回值(例如delete和throw)。我们稍后会讨论它们的作用。

一些运算符具有附加行为。具有除产生返回值外的可观察效果的运算符(或函数)被称为具有副作用。

例如,赋值运算符(=)具有副作用,因为它会修改变量的值。考虑以下代码:

int x = 5;

在这里,赋值运算符将值5赋给变量x,这是一个具有副作用的操作。

又如,输出运算符(<<)也具有副作用,因为它会将内容输出到控制台。

具有副作用的运算符通常根据其副作用的行为而被调用,而不是根据它们产生的返回值(如果有的话)。这些运算符在执行后会影响程序的状态,而不仅仅是计算一个值。

原创文章,作者:jkhxw,如若转载,请注明出处:https://www.jkhxw.com/cpp-literals-and-operators/

(0)
上一篇 2023年10月1日
下一篇 2023年10月1日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注