将预增量结果转换为空的原因

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

[cppreference为可能的for_each_n实现提供以下代码:

template<class InputIt, class Size, class UnaryFunction>
InputIt for_each_n(InputIt first, Size n, UnaryFunction f)
{
    for (Size i = 0; i < n; ++first, (void) ++i) {
        f(*first);
    }
    return first;
}

为什么++i的结果强制转换为void?是因为我们舍弃++i的结果来抑制可能的编译器警告吗?如果是这样,为什么++first也不能转换为void?因为operator ,隐式丢弃了它?

c++
1个回答
10
投票

输入


-1
投票

是因为我们舍弃++ i的结果来抑制可能的编译器警告吗?

抑制警告是我所知道的将废弃表达式强制转换为void的唯一原因。

如果是这样,为什么++ first也不能强制转换为void?

大概不会对该子表达式发出任何被抑制的警告。


P.S。链接页面中链接的两个标准库实现(stdlibc ++,libc ++)都没有强制转换为void。

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