元操作符..的优先级是什么?
What is the precedence of the meta-operator ...?
用于解包模板类型参数包的元操作符...
的优先级是多少?我想应该很低,但到底有多低呢?c++标准规定:
操作符的优先级没有直接指定,但可以从语法中派生。
有人愿意接受挑战吗?当然,...
不会出现在c++ 03的运算符优先级表中。
好吧,如果...
不是一个运算符,那么究竟是什么决定了std::forward<Args>(args)...
适用于整个序列std::forward<Args>(args)
,而不仅仅是(args)
?
这似乎不是操作符。来自N3092(抱歉我手头没有更近的草稿)
[14.5.3] 4/一个包扩展是一个序列的令牌,命名一个或更多参数包,后面跟着省略号。令牌序列称为模式的扩张;它的语法取决于扩容发生的环境。包扩展可以发生在以下上下文:
- 在一个初始化列表(8.5);模式是initializer-clause。
- 在base- specific -list中(10);模式是一个基本说明符。
- 在mem-initializer-list中(12.6.2);模式是mem-initializer。
- 在模板参数列表中(14.3);模式是模板参数。
- 在动态异常规范中(15.4);模式是id类型。
- 在属性列表中(7.6.1);模式是一个属性。
在捕获列表(5.1.2);模式是一个捕获。(例子:
template<class ... Types> void f(Types ... rest); template<class ... Types> void g(Types ... rest) { f(&rest ...); // “&rest ...” is a pack expansion; “&rest” is its pattern }
根据方便的超链接c++ BNF语法,函数调用看起来像这样:
postfix-expression (expression-listopt)
expression-list只是一个初始化列表,它看起来像这样:
initializer-clause…<子>选择子>
opt
,其中的省略号是包展开符号。
初始化子句可以是赋值表达式或带括号的初始化列表。
这就是说,省略号在语法上的优先级比任何实际的操作符都低,因此,例如以下语句是等价的:foo(args ^= 0x1234...) and foo((args ^= 0x1234)...)
foo(x ? args : 42...) and foo((x ? args : 42)...)
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 派生类销毁的最佳实践是什么
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 通过JNI传递数据数组的最快方法是什么
- "using namespace std;"在C++的作用是什么?
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 文件系统:复制功能的速度秘诀是什么
- 在C++11类型推理过程中,控制优先级的规则是什么
- 什么是支持优先级、更新、推送和弹出的最佳数据结构
- 程序员对优先级队列实现的默认选择是什么?
- 元操作符..的优先级是什么?