当我将字符串转换为vector <byte>时,字符串迭代器不兼容ERROR

时间:2017-08-31 11:31:30

标签: c++ vector

我有Const变量:

#define     ERROR_ME        std::string("Error Message")

在函数中,我想返回std :: vector 所以,我写这个:

return std::vector<byte>(ERROR_ME.begin(), ERROR_ME.end()); // this have error
你可以帮帮我吗?

1 个答案:

答案 0 :(得分:6)

不,你没有&#34; Const [sic]变量&#34;,你有一个符号常量,在编译器正确有机会读取它之前在源代码中被替换。

编译器将看到的代码不是

return std::vector<byte>(ERROR_ME.begin(), ERROR_ME.end());

但是

return std::vector<byte>(std::string("Error Message").begin(), std::string("Error Message").end());

也就是说,从两个不同且不相关的对象中获取beginend迭代器。比较或不相关的迭代器的其他交互导致undefined behavior

如果你想要一个真正的常数,那么使用例如

std::string const ERROR_ME = "Error Message";