作者:蜜小嘟_546 | 来源:互联网 | 2022-12-07 20:14
我正在尝试从具有std::string
as键的无序映射中接收值,其中一些字符串只包含一个字符.我的所有输入都来自于std::stringstream
我从中获取每个值并将其转换为char,然后将其转换为字符串使用
std::string result {1, character};
,根据文档和此答案,这似乎是有效的.
但是,当我这样做时,字符串前置\ x01(对应于值1).这使得在地图中找不到字符串.我的调试器还确认字符串大小为2,值为"\ x01H".
为什么会发生这种情况,我该如何解决?
#include
#include
#include
int main()
{
const std::unordered_map map = { {"H", 1}, {"BX", 2} };
std::stringstream temp {"Hello world!"};
char character = static_cast(temp.get()); // character is 'H'
std::string result {1, character}; // string contains "\x01H"
std::cout <
kabanus..
7
您使用大括号{}
而不是括号()
,与您链接的问题不同.这使它成为初始化列表,而不是您期望的构造函数.
1> kabanus..:
您使用大括号{}
而不是括号()
,与您链接的问题不同.这使它成为初始化列表,而不是您期望的构造函数.
再一个例子,为什么一个人不应该使用统一的初始化...坚持括号,这是更明确的; 我个人走得那么远甚至使用带有初始化列表的括号:`std :: string s({&#39;a&#39;,&#39;b&#39;,&#39;c&#39;})`.(承认,尝试显式调用默认构造函数实际上声明一个函数存在问题,但该规则远没那么复杂......).