2017-08-31 115 views

回答

6

不,你没有“Const [sic]变量”,你有一个符号常量,在编译器本身有机会读取它之前在源代码中被替换。

的代码编译器将看到的不是

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"; 
+0

这个返回std :: vector (std :: string(“Error Message”)。begin(),std :: string(“Error Message”)。end());不工作,但是当我使用const变量它没关系(std :: string const ERROR_ME =“Error Message”;),tanx –

相关问题