簡體   English   中英

insert_or_assign允許迭代器

[英]insert_or_assign is allowing iterator

我有這段代碼:

auto it = my_map.lower_bound(my_key);

以下斷言給我錯誤:

static_assert(std::is_same<decltype(it), std::map<K, V>::const_iterator>::value, "Error");

並且以下一項是可以的:

static_assert(std::is_same<decltype(it), std::map<K, V>::iterator>::value, "Error");

然后,編譯器沒有給我const_iterator 好。 但在這兒:

my_map.insert_or_assign(it, my_key, some_val);

即使使用iterator (不是const_iterator ),該函數也可以正常工作。 但是,在此鏈接上 ,在insert_or_assign簽名上,我只有const_iterator參數。 我還在Visual Studio上搜索了.h文件,並且此信息匹配。 經過GCC 7.2+和Visual Studio 2015的測試,所有內容均可編譯並運行。

為什么要編譯? 為什么insert_or_assign接受iterator

所有容器都必須提供可轉換為const_iteratoriterator類型。 請參閱容器要求

X​::​iterator必須是滿足前向迭代器要求的任何迭代器類別。 可轉換為X::const_iterator

因此,將根據在insert_or_assign的調用中lower_bound返回的iterator構造一個const_iterator

您的lower_bound調用將為您提供非常量映射上的非常量迭代器。 但是,存在從非常量迭代器到常量迭代器的自動轉換,因此任何需要const_iterator的函數都可以使用相同類型的非常量迭代器進行調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM