为什么文字在C++中被认为是表达式
Why literals are considered expressions in C++?
我正在使用编程原理学习C++编程语言,并练习使用C++。我现在在第4章,在这一章中,这本书介绍了表达的概念,但我根本无法理解:
程序中最基本的构建块是表达式。反压缩从多个操作数计算一个值。C++中最简单的表达式就是一个文字值,比如11、"C"、"hello"。变量的名称也是表达式。一个变量代表的对象就是它的名字。
为什么文字被认为是一种表达?为什么变量的名称被认为是一个表达式?
表达式在编程语言、数学和语言学中都是以合成(或归纳)的方式定义的。因此,表达式通常由子表达式组成,如x*2+y*4
由两个子表达式x*2
和y*4
组成,并由加法运算符+
连接。
但你需要一个基本的情况(最原子和最简单的表达式)。这些是文字(2
)和变量(x
)-如果它们中的任何一个不是表达式,2*x
就不能是表达式(因为二进制乘法的两个操作数*
都是子表达式)。
注意,在C和C++中,赋值和函数调用是表达式
这样想:表达式是产生值的一系列步骤。因此,4+3
是一个两步表达式,因为你(1)从数字4
开始,(2)加上3
因此,7
可以被视为单步序列,因为只有一个"动作"被执行:(1)从数字7
开始。
因此,a = 4+3;
和a = 7;
都可以推广为a = <expression>;
。
表达式是"指定计算的运算符和操作数序列"(http://en.cppreference.com/w/cpp/language/expressions)。
让我们看一个简单的表达式:3+3。当你计算这个表达式时,你会得到结果6。
让我们看看另一个表达式:3。当你计算这个表达式时,你会得到结果3。
文字被视为表达式,因为文字是常量的类型,而常量是具有固定值的表达式。
变量也被视为表达式,因为它可以用作另一个表达式中的操作数,也可以单独用作表达式。
在软件设计中,复合模式可以用作表达式的表示。
- 为什么rand()的使用被认为是不好的
- 为什么 std::shared_ptr 被认为是"heavy"和"expensive",但 std::array "same perfprmance as plain (c-style) arrays
- 一个C头文件可以被认为是一个接口吗
- 为什么const char*和const char[]作为函数参数被认为是等价的
- 为什么12.0==11.999999999999999999被认为是真的
- 这会被认为是糟糕的编程实践吗?
- 为什么这被认为是恒定的?
- 抽象类/接口中的空方法是否被认为是一种好的做法?
- 如果我具有调用其其他实例之一的超载函数,它是否被认为是递归功能
- std::unique_ptr可以被认为是一个monad吗?
- C++ 指向类的指针和/或引用是否被认为是"movable"?
- 使用自定义宏来简化 cin 和 cout 语句等内容被认为是更好还是更差
- 使用成员函数更改对象或返回并分配它是否被认为是更好的做法?
- 我很难修复我认为是双重免费的东西
- 使用 #define 被认为是"bad practice"吗?
- 是一个被认为是不同类型的班级内部的正向声明
- 这被认为是有效的C 11还是C 14?还是GCC/Clang弄错了
- 为什么返回非引用类型的函数表达式被认为是prvalues而不是xvalues
- 为什么文字在C++中被认为是表达式
- QScriptEngine:错误表达式被认为是有效的