我从堆栈溢出中发现了很多例子,但这些例子都基于非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()));
}
案例1(非最高级别?):
std::string input = "abcde";
std::string encrypt_password = encrypt(input);
案例2(顶级?):
std::string const input = "abcde";
std::string encrypt_password = encrypt(input);
我肯定,encrypt_str 不会改变我传入的char *(如果有可能,我想请他们修复这个非const纠正api)。
ps:我不确定我是否完全理解什么是顶级const /&amp; /&amp;&amp; / volatile,这就是为什么我把&#34;?&#34;案件背后
答案 0 :(得分:2)
关于const_cast
,您必须注意的规则是,如果您使用它来修改最初声明为const
的对象,那么您将获得未定义的行为。
只要您确定不会发生这种情况,那就很好。
std::string
的常量没有任何区别。即使std::string
不是const
,c_str
函数仍会返回const char*
。制作std::string
const
时,没有任何变化。