如果字符串是const,可以const_cast c_str()吗?
Can I const_cast c_str() if the string is const?
我发现了很多堆栈溢出的例子,但这些例子都是基于非const std::string。如果字符串是const(顶级和非顶级)怎么办?
std::string encrypt(std::string const &input)
{
//do something, ArrayGuard is a smart pointer to guard the raw char* delete by free
ArrayGuard<char> guard(encrypt_str(const_cast<char*>(input.c_str())));
return std::string(guard.get(), std::strlen(guard.get()));
}
case 1(非顶层?):
std::string input = "abcde";
std::string encrypt_password = encrypt(input);
case 2(顶级?):
std::string const input = "abcde";
std::string encrypt_password = encrypt(input);
我确定 encrypt_str 不会改变我传递给它的char*(如果可能的话,我想要求他们修复这个非const校正api)。
ps:我不确定我完全理解什么是顶级const/&/&&/volatile,这就是为什么我在
关于const_cast
,您必须注意的规则是,如果您使用它来修改最初声明为const
的对象,那么您将获得未定义的行为。
只要你确定这不会发生,你就很好。
std::string
的稳定性没有任何影响。即使std::string
不是const
, c_str
函数仍然返回const char*
。当你把std::string
改成const
时,没有什么变化。