为什么在此 C++ 标准提案中使用 `(void)++p` 而不是仅使用 `++p`?

问题描述 投票:0回答:1

a C++ 标准提案中,我发现了一个奇怪的代码片段如下:

template <input_iterator I, sentinel_for<I> S, nothrow_forward_iterator I2>
constexpr auto uninitialized_copy(I first, S last, I2 d_first) -> I2 {
    using T = iter_value_t<I2>;
    I2 current = d_first;
    try {
        for (; first != last; ++first, (void)++current) {
            ::new (std::addressof(*current)) T(*first);
        }
    } catch (...) {
        std::destroy(d_first, current);
        throw;
    }
}

为什么使用

(void)++current
而不仅仅是
++current
在这里?

c++ expression standards void
1个回答
0
投票

++first, (void)++current
使用逗号运算符
,

如果

++first
计算为类型
T
++current
计算为类型
U
并且存在适用于
operator,
/
T
参数的
U
重载,则这将称为
operator,
重载.

但是,它并不是为了被调用而设计的。通过使两个操作数之一具有类型

void
,就不可能选择
,
的重载,并且它将始终具有内置含义。

© www.soinside.com 2019 - 2024. All rights reserved.