我不明白这个:
(7.6.1)只有在引入属性指定符时才会出现两个连续的左方括号标记.[注意:如果在不允许属性指定的情况下出现两个连续的左方括号,即使括号与替代语法生成匹配,程序也会形成错误. - 尾注] [例子:(略微修改自来源)
// ...
void f() {
int x = 42, y[5];
// ...
y[[] { return 2; }()] = 2; // error even though attributes are not allowed
// in this context.
}
Run Code Online (Sandbox Code Playgroud)
可以[[使用什么替代语法?如果属性不存在,示例是否有效(示例的作用是什么)?
该示例创建了一个简单的 lambda,它被直接调用并且仅返回2。这将从数组中获取第三个元素并将其分配给2。可以重写如下:
int foo(){ return 2; }
int y[5];
y[foo()] = 2;
Run Code Online (Sandbox Code Playgroud)
甚至
int y[5];
auto foo = []{ return 2; }; // create lambda
y[foo()] = 2; // call lambda
Run Code Online (Sandbox Code Playgroud)
现在,如果属性不存在,那么该示例当然是格式良好的,因为您引用的部分将不存在。