在线文档教程
C++
语言 | Language

Expressions

表达

表达式是操作者以及他们操作数指定计算。

表达式评估可产生结果%28e。g.,评价2+2产生结果4%29,并可能产生副作用%28等。对...的评价std::printf("%d",4)打印字符'4'在标准输出%29上。

一般

  • 价值范畴%28,rvalue,glvalue,prvalue,xvalue%29按值对表达式进行分类

  • 评价顺序的参数和子表达式指定获得中间结果的顺序。

操作者

公共算子

*。

分配增量递减算术逻辑比较成员访问其他

a=b a+=b a-=b a%2A=b a/=b a%=b a&=b a=b a^=b a<=b a>>=b.+a-a+a-+a-+a-a+b a-b a%2Ab a/b a%b~a&b ab^b a<<b a>>b.%21 a&b a&b ab a=b a%21=b a<b a>b a<=b a>=b a乙%2AA&A->b A.B a->%2Ab a.%2AA%28...%29 a,b?*

特殊运算符

静态[医]强制转换将一种类型转换为另一种相关类型动态。[医]继承层次结构中的强制转换[医]强制转换添加或删除cv限定符,重新解释[医]CAST将类型转换为不相关的类型C风格的强制转换通过混合静态方式将一种类型转换为另一种类型[医]卡斯特[医]重释[医]强制转换新创建具有动态存储持续时间的对象,删除删除以前由新表达式创建的对象,并释放获得的内存区域大小查询类型的大小...查询参数Pack%28的大小,因为C++11%29 Tyid查询类型no的类型信息,除了检查。表达式可以抛出异常%28,因为C++11%29查询对齐要求类型为%28,因为C++11%29。

  • 运算符优先定义运算符绑定到其参数的顺序。

  • 替代表示对某些算子来说是可替换的拼法。

  • 操作者超载使得可以用用户定义的类来指定操作符的行为。

转换

  • 标准转换从一种类型到另一种类型的隐式转换

  • const_cast转换

  • static_cast转换

  • dynamic_cast转换

  • reinterpret_cast转换

  • 显式铸造使用C型铸造表示法和函数表示法的转换

  • 用户定义转换使从用户定义的类指定转换成为可能。

内存分配

  • 新表达式动态分配内存

  • 删除表达式动态释放内存

其他

  • 常数表达式可以在编译时进行评估,并在编译时上下文%28模板参数、数组大小等中使用。

  • sizeof

  • alignof

  • typeid

  • 抛出

主表达式

任何运算符的操作数都可以是其他表达式或主表达式%28例如。在1+2*3,运算符+的操作数是子表达式。2*3以及主要表达129%。

主要表达式如下:

1%29字面值%28例如。2"Hello, world"%29

2%29适当宣布不合格标识符%28等ncout%29

3%29适当宣布合格标识符%28等std::string::npos%29

4%29Lambda-表达式%28C++11%29

5%29折叠式%28C++17%29

括号中的任何表达式也被归类为主表达式:这保证括号比任何运算符具有更高的优先级。括号保留值、类型和值类别。

文字

文字是C++程序的标记,表示嵌入在源代码中的常量值。

  • 整数字元是整数类型的十进制、八进制、十六进制或二进制数。

  • 字符文字是类型的个人字符吗?char,,,char16_t,,,char32_t,或wchar_t

  • 浮点文字是类型的值float,,,double,或long double

  • 字符串文字类型的字符序列const char[],,,const char16_t[],,,const char32_t[],或const wchar_t[]

  • 布尔文字是类型的值bool,那就是truefalse

  • nullptr自C++11%29以来指定空指针值%28的指针文字

  • 用户定义文字是自C++11%29以来用户指定的类型%28的常量值。

未计算表达式

四个算子的操作数typeid,,,sizeof,,,noexcept,和decltype%28,因为C++11%29是不计算%28的表达式,除非它们是多态值,并且是typeid%29,因为这些运算符只查询其操作数的编译时属性。因此,std::size_tn = sizeof(std::cout<<42不执行控制台输出。

The unevaluated operands are considered to be full expressions even though they are syntactically operands in a larger expression (for example, this means that sizeof(T()) requires an accessible T::~T).(since C++14)

大要求-表达式%28概念TS%29也是未计算表达式。

废弃值表达式

废弃值表达式是仅用于其副作用的表达式。从这种表达式计算的值被丢弃。这些表达式包括任何表达式语句,逗号运算符的左边参数,或强制转换为类型的表达式的参数。void...

数组到指针和函数到指针的转换从不应用于由丢弃的值表达式计算的值。然而,lvalue到rvalue的转换是应用的,但只有当表达式是挥发性合格值,并具有下列形式之一%28,可能是括号内的%29。

  • ID-表达式

  • 数组下标表达式

  • 类成员访问表达式

  • 间接

  • 指针对成员操作

  • 条件表达式,其中第二个和第三个操作数都是这些表达式之一,

  • 右操作数是其中一个表达式的逗号表达式。

In addition, if the expression is of class type, a volatile copy-constructor is required to initialize the resulting rvalue temporary.(until C++17)
If the expression is a prvalue (after any lvalue-to-rvalue conversion that might have taken place), temporary materialization occurs. If the original glvalue is of volatile-qualified class type, a volatile copy-constructor is required to initialize the resulting rvalue temporary. Compilers may issue warnings when an expression other than cast to void discards a value declared [nodiscard](since C++17)

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/language/表达式