在阅读cppreference对functional style cast的描述时,我偶然发现了以下对void()
的解释:
如果target-type是(可能是cv限定的)void,则表达式是没有结果对象的void纯右值(C++17起)
现在我明白了,我可以像这样创建一个void()
纯右值,但是我可以用它来做什么,为什么这是可能的呢?
在阅读cppreference对functional style cast的描述时,我偶然发现了以下对void()
的解释:
如果target-type是(可能是cv限定的)void,则表达式是没有结果对象的void纯右值(C++17起)
现在我明白了,我可以像这样创建一个void()
纯右值,但是我可以用它来做什么,为什么这是可能的呢?
2条答案
按热度按时间n1bvdmb61#
我想你是指这一段
1.函式样式的转型运算式是由简单型别规范或typedef规范(换句话说,单字型别名称,也就是
unsigned int(expression)
和int*(expression)
这类的情况无效),后面接着括号中以逗号分隔的运算式清单所组成。而子弹
void
,则表达式是没有结果对象的void prvalue(自C++17起)。如果你把标准的语言放在一边,它实际上并没有那么复杂。我想你会奇怪为什么有人会写这样的东西:
字符串
根据上述,这是有效的,但不是真正有用的。“现在,假设您有一个如下所示的函数模板:
型
然后,您可以使用
T
示例化它,其中value_type
为void
:型
没有返回对象,但
foo<X>
中表达式T::value_type
的类型为void
,函数有void
返回类型。wgxvkvu92#
但我能用它做什么
有几个地方它是有用的,直接使用:
decltype
(在C++20中用requires
作为超级种子)字符串
operator,
(如果一方是void
,则没有自定义可用的operator,
可用)。型
在泛型代码中也有替换后:
型
foo<void>()
有效。