【问题标题】:What is the purpose of (void) casts in the GCC standard library implementation?GCC 标准库实现中 (void) casts 的目的是什么?
【发布时间】:2021-08-26 10:58:57
【问题描述】:

在GCC的stdlibc++中std::ranges::transform的实现中,为什么for循环迭代器增量有(void)转换?

for (; __first1 != __last1 && __first2 != __last2;
         ++__first1, (void)++__first2, ++__result)

【问题讨论】:

    标签: c++ for-loop iterator std-ranges


    【解决方案1】:

    这是因为在 C++ 中它是possible to overload the comma operator。直到今天我仍然无法获得它的好处,但这并不重要。重要的是这是可能的。

    显式void 强制转换可防止意外调用此处的重载运算符产生意外副作用,从而产生不希望的结果。请注意单个 void 转换如何有效地防止调用左侧和右侧的逗号运算符。

    【讨论】:

    • 要明确:两个逗号运算符都适用,但它们是内置的逗号运算符。它是未应用的用户定义的重载。 void 使它们中毒,因为重载的运算符是函数,您不能将 void 作为参数传递给函数。
    猜你喜欢
    • 2013-04-04
    • 2021-06-29
    • 2021-11-23
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多