【发布时间】:2021-02-23 18:09:26
【问题描述】:
在example 14 under [dcl.init.list] 中,标准在使用列表初始化来描述代码语义时,在缩小转换的范围内使用术语“顶级”。我不知道这是什么意思。
这段代码执行没有错误:
int f(int a) { return 1;}
int main() {
int a[] = {f(2), f(2.0)};
int b[] = {f(2.0), f(2)}; // No error because: double-to-int conversion is not at the top-level
}
我还尝试了以下方法。我认为这与初始化顺序无关:
int f(int a) { return 1;}
int main() {
int a[] = {f(2), f(2.0)};
int b[] = {f(2.0), f(2)}; // double-to-int conversion is not at the top-level
//int c[] = {f(2147483645.0f), f(2)}; // This is erroring out due to narrowing.
int d[] = {f(2), f(2.0)}; // Now I'm sure top-level doesn't mean the order of initialization.
}
我对这个术语感到好奇的原因是因为我试图了解当隐式调用缩小转换时列表初始化器何时工作。
我也不确定术语。例如,是否存在诸如顶级类、顶级类型或顶级列表初始化器之类的东西?
【问题讨论】:
-
“没有错误,因为:double-to-int 转换不在顶层” 那么这句话是从哪里来的呢?这是一个警告吗?还有什么?到目前为止,从我们掌握的信息来看,唯一使用它的人就是您;)
-
请在您的问题中添加关键细节! (但是,标准不是“文档”)
-
@AsteroidsWithWings “此处”链接之一指向标准,其中显示“注意 7:如上所述,列表初始化中的顶级不允许此类转换。”可以在问题中更清楚地指出,是的
-
@idclev463035818 我已经修复了它
-
有时单词只是单词,并没有比从上下文中得到的含义更有意义。是的,可以有一个“顶级类”,就像你将 3 个盒子叠放在一起就有一个顶级盒子,每个人都会明白指的是哪个盒子
标签: c++ c++11 language-lawyer