我有一个功能
static bool Validate(const char& letter, string& aWord)
我需要调用它
Validate(letter, aWord); // where aWord is const
在这种情况下 const_cast 的正确方法是什么?
我有一个功能
static bool Validate(const char& letter, string& aWord)
我需要调用它
Validate(letter, aWord); // where aWord is const
在这种情况下 const_cast 的正确方法是什么?
如果您绝对确定该函数不会修改字符串,您可以这样做:
Validate (letter, const_cast<std::string &>(aWord));
但是,如果可以假设将签名更改为const
,则更安全的做法是复制字符串并传递副本,尽管这是不必要的副本。
std::string copyOfAWord = aWord;
Validate (letter, copyOfAWord);
如果它确实改变了某些东西,你的副本会得到结果,但它会首先破坏你的逻辑。
正确的方法是不要施放它。
这里的签名
static bool Validate(const char& letter, string& aWord)
就是说Validate()
可以改变参数aWord
。因此,向它传递一个将要发生变异的 const 值是未定义的行为(如果它发生了变异(参见最后一段))。
如果您确定它Validate()
不会变异,aWord
那么仍然不要抛弃 constness。在这种情况下,更改其签名以反映所提供的保证。
不是 const的事实aWord
意味着它可以 mutate aWord
。即使它在这个版本中没有发生变异,未来可能会有人出现并改变它。然后你的程序将以一种可怕的方式中断,以至于无法找到错误。
如果你抛弃了 constness,那么你做错了什么。
唯一的解决方案(如果您不能更改界面)是通过非成本版本。既然你没有;你应该创建一个:
std::string aWordTmpCopy(aWord);
Validate(letter, aWordTmpCopy);