簡體   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