此篇是对内存序学习笔记(一)——表达式求值顺序-CSDN博客 罕见概念的解释。
- 完整表达式。没有父表达式(与成分表达式对应)的表达式。例如
a = 1, b = 2;
std::invoke([](int a, int b){}, 1, 2);
- 弃值表达式。返回值未被使用的表达式。例如
a = 1, b = 2;
std::max<int>(1, 2);
- 成分表达式。子表达式。例如
{
a = 1, b = 2;
}
其中的 a, b, 1, 2, a = 1 和 b = 2
{
std::max<int>(a + 1, b + 2);
}
其中的 a, b, 1, 2, a + 1 和 b + 2
- 指名函数表达式。值计算结果为函数的表达式。例如
{
auto func = [](){};
func();
}
其中的 `func`
- 成员指针表达式。值计算结果为类成员指针的表达式。例如
struct B {
int data;
};
{
auto B::*ptr = &B::data;
B b;
b.*ptr = 1;
}
其中的 `b.*ptr`
- 复合赋值表达式。复合赋值运算符作为最后计算的表达式。例如
a += 1;
a += (1 + 1);
复合赋值运算符包括但不限于
+=
*=
>>=
<<=