我有Const变量:
#define ERROR_ME std::string("Error Message")
在函数中,我想返回std :: vector 所以,我写这个:
return std::vector<byte>(ERROR_ME.begin(), ERROR_ME.end()); // this have error
你可以帮帮我吗?
答案 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());
也就是说,从两个不同且不相关的对象中获取begin
和end
迭代器。比较或不相关的迭代器的其他交互导致undefined behavior。
如果你想要一个真正的常数,那么使用例如
std::string const ERROR_ME = "Error Message";