如果字符串是const,我可以const_cast c_str()吗?

时间:2014-06-19 03:17:51

标签: c++

我从堆栈溢出中发现了很多例子,但这些例子都基于非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;案件背后

1 个答案:

答案 0 :(得分:2)

关于const_cast,您必须注意的规则是,如果您使用它来修改最初声明为const的对象,那么您将获得未定义的行为。

只要您确定不会发生这种情况,那就很好。

std::string的常量没有任何区别。即使std::string不是constc_str函数仍会返回const char*。制作std::string const时,没有任何变化。