术语primary-expression是语言语法的一个元素。它们同样可以被称为foobar-expression,它只是一个没有任何更深层含义的名称。
primary-expression不一定是原子的、先求值的、顶级的、比其他表达式更重要或类似的东西。并且所有表达式都是“构建块”,因为可以添加任何表达式以形成更大的表达式。
问题中已经给出了定义,这里不再赘述。
(variable + 10)是一个主要的表达,你的“其他来源”是错误的。这是另一个主要表达式的例子:
([]{
int n, t1 = 0, t2 = 1, nextTerm = 0;
cout << "Enter the number of terms: ";
cin >> n;
cout << "Fibonacci Series: ";
for (int i = 1; i <= n; ++i)
{
// Prints the first two terms.
if(i == 1)
{
cout << " " << t1;
continue;
}
if(i == 2)
{
cout << t2 << " ";
continue;
}
nextTerm = t1 + t2;
t1 = t2;
t2 = nextTerm;
cout << nextTerm << " ";
}
return 0;
}())
(这会调用一个 lambda 函数并将结果括起来;代码是从 : here借来的)。
此外,这个问题还涉及到对优先级和评估顺序的普遍误解。该标准根本没有提到“优先级”。优先表是一种以更易于阅读的方式呈现语言语法规则的方式。
它指的是操作数与运算符的分组方式,而不是子表达式的执行顺序。在f() + ([]{int n, t1 = 0, t2 = 1, nextTerm = 0; cout << "Enter the number of terms: ";.... etc. etc. 的情况下,在f()调用 lambda 之前可能会或可能不会调用。lambda 周围的括号不会导致它首先被评估。