繁体   English   中英

std :: basic_string类型的非const引用的init无效 <char> :: const_iterator&来自std :: basic_string类型的rvalue <char> ::为const_iterator

[英]Invalid init of non-const reference of type std::basic_string<char>::const_iterator& from rvalue of type std::basic_string<char>::const_iterator

我在GCC上编译以下MWE时遇到上述错误

#include <string>

void frobnigate( const std::string& str )
{
    std::string::const_iterator& iter = str.begin();
}

int main()
{
    frobnigate( "all things!!!" );
}

我做错了什么还是GCC问题?

我做错了什么还是GCC问题?

是的,你做错了什么。

std::string::begin()返回一个值类型rvalue ,因为它是临时的)。 但是你试图从rvalue初始化一个非const引用,这在C ++中是非法的。

你绝对想要:

std::string::const_iterator iter = str.begin();

更好的是:

auto iter = str.begin();

迭代器的复制成本很低,应该按值使用,因此对迭代器的引用或const引用是不受欢迎的。

你应该做这个:

std::string::const_iterator iter = str.begin();

也就是说,删除引用,因为begin()返回一个值而不是引用,并且您需要管理该迭代器的生命周期(这将是一个简单,小巧,便宜的值,如指针)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM