c++ - 什么时候允许推导 initializer_list?
问题描述
我知道什么时候可以推导出 initializer_list 有一些特殊的规则,但是直到发现以下内容,我以某种方式认为这从来都不是。什么时候可以推断或省略的规则是什么initializer_list
?
下面的例子似乎不合逻辑,感觉就像语言缺陷?
#include <initializer_list>
void test() {
bool reverse = true;
const auto ascend = {1,2,3};//OK : seems to deduce to std::initializer_list<const int>
//const auto a_or_d_AUTO = reverse ? {3,2,1} : {1,2,3};//not ok, why ?
const auto i = reverse ? 3 : 1;// also fine
const auto a_or_d = reverse ? std::initializer_list<const int>({3,2,1}) : std::initializer_list<const int>({1,2,3});//also OK
}
解决方案
这与扣除无关。的语法?:
需要所有三个操作数的实际表达式:
conditional-expression:
logical-or-expression
logical-or-expression ? expression : assignment-expression
大括号初始化列表不是表达式,根本不能与?:
.
推荐阅读
- javascript - 如何在javascript中使用覆盖层录制网络摄像头?
- system-verilog - 为代理数组设置参数化虚拟接口
- post - 如何在 Post 请求中使用 getStaticProps 或 getserversideProps?
- java - Java 的 NIO StandardOpenOption.Append 操作的时间复杂度
- python - Scipy.minimize 不适用于 np.random.choice 作为输入的概率
- javascript - Gulp 可以吗?Gulp 更改文本和目标
- python - 不和谐.py | Sqlite 邀请记录器
- mongodb - 将 MERN 应用程序部署到 heroku 时,操作 `users.findOne()` 缓冲在 10000 毫秒后超时
- qgis - 从 QGIS 中的 HERE-api 获取不完整的结果(生成等时线时)
- r - 删除了包含缺失值的 N 行,但没有缺失值或超出范围的值