C++11:变分模板函数参数包扩展执行顺序
C++11: Variadic Template Function Parameter Pack Expansion Execution Order
考虑以下代码:
template<class T>
size_t f(T t, size_t& x) { return x++; }
template<class... Args>
void g(Args... args)
{
size_t x = 0;
size_t y[] = { f(args, x)... };
for (size_t i = 0; i < sizeof...(args); i++)
assert(y[i] == i);
}
C++11标准是否保证断言不会被激发?为什么?
是的,它保证不会开火。请参阅以下报价:
§14.5.3可变模板:
包扩展可以出现在[…]初始值设定项列表中;模式是初始值设定项子句。
§8.5.1骨料:
初始值设定项子句中的完整表达式在它们出现的顺序。
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 为什么不;名字在地图上是按顺序排列的吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 数到第n个楼梯的路(顺序无关紧要)
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 优先顺序:智能指针和类析构函数
- 在循环中按顺序遍历成员变量
- 独立读取-修改-写入顺序
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 扩展光电二极管探测器以支持多个传感器
- QML按钮点击功能执行顺序
- 集成多态可扩展排序顺序
- 参数包扩展顺序
- 按特定顺序扩展可变参数模板值的最有效方法是什么?
- 可变模板扩展中函数调用的顺序
- C++11:变分模板函数参数包扩展执行顺序
- C++11 原子排序:锁的扩展总顺序memory_order_seq_cst
- 松弛的内存顺序效果是否可以扩展到执行线程的生命周期之后?