C++ 为什么这个使用std::rotate的简单程序不能编译?
这不起作用: 这显然是不正确的行为,因为旋转的声明是:C++ 为什么这个使用std::rotate的简单程序不能编译?,c++,c++11,std,C++,C++11,Std,这不起作用: 这显然是不正确的行为,因为旋转的声明是: template<class ForwardIterator> ForwardIterator rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last); 模板 ForwardIterator旋转(ForwardIterator第一,ForwardIterator中间, 转发器(最后一个); 为什么这个简单的
template<class ForwardIterator>
ForwardIterator rotate(ForwardIterator first, ForwardIterator middle,
ForwardIterator last);
模板
ForwardIterator旋转(ForwardIterator第一,ForwardIterator中间,
转发器(最后一个);
为什么这个简单的程序无法编译?在C++11之前。因此,您可能使用的是非C++11兼容的实现。这看起来像是
libstdc++
问题,我们可以通过同时使用libstdc++
和libc++
进行测试来看到这一点,我们可以看到它只有在使用libstdc++
时才会失败
使用使快速测试变得非常简单,不会生成错误。而会生成以下错误:
错误:变量的类型“void”不完整
如果我们查看cppreference条目,我们可以看到C++11之前的版本确实返回了void
:
template< class ForwardIt >
void rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ) (until C++11)
template< class ForwardIt >
ForwardIt rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ); (since C++11)
另外,可能值得注意的是,该代码没有任何问题。在C++11之前,
rotate
没有返回任何内容。显然,您的标准库实现并不是完全最新的。它是libstdc++(“rotate返回void”)。
template<class ForwardIterator>
ForwardIterator rotate(ForwardIterator first, ForwardIterator middle,
ForwardIterator last);
template< class ForwardIt >
void rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ) (until C++11)
template< class ForwardIt >
ForwardIt rotate( ForwardIt first, ForwardIt n_first, ForwardIt last ); (since C++11)
25.3 | Mutating sequence operations | Partial rotate | returns void.