2017-08-31 29 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 –

相關問題