当前位置: 首页 > 知识库问答 >
问题:

当静态_cast后面有两对括号时,它意味着什么?

夹谷俊远
2023-03-14

这说明了什么:

return static_cast<Hasher &>(*this)(key);

?

我不知道是*这个还是被传递到了静态播放。我环顾四周,找到了这个答案,但与我所说的不同,第一对括号里什么都没有。

共有2个答案

龚国源
2023-03-14

我不知道是*这个还是key传递给static_cast

如果你不确定,你可以查一下语法。

在非正式文档中,static_cast的唯一可用语法是:

static_cast < new-type > ( expression )

在您比较的任何标准草案中也是如此。

所以没有static_cast

  • new-type=Hasher

总的来说相当于

Hasher& __tmp = static_cast<Hasher &>(*this);
return __tmp(key);

解释是,该类有一个继承自私有基类的函数调用操作符Hasher,它希望显式地调用它,即,Hasher::operator(),而不是调用其他继承的operator()。您会注意到,同样的机制也用于显式调用其他私有继承的函数调用操作符。

如果它为每个策略类型参数使用不同的函数名,则会更清晰,但例如,您不能直接为equal参数使用std::equal_to

如果它使用数据成员而不是Hasher相等等的私有继承,它也可能更清晰,但选择这种方式是为了允许对无状态策略进行空基类优化。

钮才哲
2023-03-14

该语句被解析为

return (static_cast<Hasher &>(*this))(key);

因此,static_cast的参数是*this。然后强制转换的结果,让我们称之为x,在以key为参数的函数调用中用作postfix-表达式,即x(key),返回其结果。

 类似资料:
  • 问题内容: 我知道这要求声明的作用。 但是有时候我在要求之后看到了两个括号。 问) 这是什么意思,它是如何工作的? 问题答案: 这是一种将所需模块的设置为功能的模式。要求该模块返回一个函数,并在require之后的括号中使用参数对函数求值。 在上面的示例中,您的文件如下所示: 这种模式通常用于将变量传递给模块,就像上面用变量所见。

  • 这里有多个任务。其中一个任务是。我们称之为。在任务-1中,我分配一个时间戳并生成水印,我使用,其中等于2min。 下一个操作符是我窗口数据,并在上面做一些聚合,然后下沉到Kafka。让我们将这个聚合和下沉的链接任务称为。 :查看这个度量值,它告诉。 问题:当我窗口元素时,我已经分配了0允许的迟到。所以它可能掉了一些元素。但是当我查看度量时,由于windows不是一个运算符,所以没有度量可以告诉wi

  • 我想这意味着查询已经执行,MySQL正在向客户机发送“结果”数据,但我想知道为什么要花这么多时间(长达一个小时)。 谢谢你。

  • 问题内容: 下面是代码片段。 有人可以向我解释@符号在Java中的含义吗? 问题答案: 这是一个注释。 注释是元数据的一种形式。它们提供的程序数据不属于程序本身。注释对其注释的代码的操作没有直接影响。 注释确实会影响工具和库对待程序的方式,进而会影响正在运行的程序的语义。可以从源文件,类文件中读取注释,也可以在运行时从中读取注释。

  • 我想创建一个

  • 为什么我们可以创建一个静态类的多个实例?我试图在静态类和静态方法之间找到并行点,但这个事实使我困惑。