主要是简单解释一下为什么要写这样一个函数,这两个const有什么意义。

const char* c_str() const{return m_str;};

1.首先说第二个const, 这个const意味this指针是一个const myString*, 所以对于变量const myString c_myStr(ss); 才能调用c_myStr.c_str();

2.再说第一个const, 既然c_myStr是一个const类型的变量,自然是希望他不被改变。那么如果不加第一个const,那么c_str()的返回值就可以赋值给一个非const类型的变量,c_myStr将有可能变相地被改变。

还有一点小提示是第一个const修饰函数的返回值,第二个const修饰函数参数。C++的overload只考虑函数参数。

不妨把注释的那些代码去掉注释,看看编译器会报什么样的错误。

 

代码
#include <iostream>
using std::cout;
class myString{
public:
myString(
char *str = NULL):m_str(str){};
~myString(){};
char* c_str(){return m_str;};
//char* c_str() const{return m_str;};
const char* c_str() const{return m_str;};
private:
char * m_str;
};
int main(){
char ss[] = "Hello";
{
myString myStr(ss);
char* p = NULL;
const char * c_p = NULL;
p
= myStr.c_str();
c_p
= myStr.c_str();
}
{
const myString c_myStr(ss);
char* p = NULL;
const char * c_p = NULL;
//p = c_myStr.c_str();
c_p = c_myStr.c_str();
}
return 0;
}

 

 

 

相关文章:

  • 2022-12-23
  • 2021-12-03
  • 2022-12-23
  • 2021-09-15
  • 2022-02-26
  • 2021-12-09
  • 2021-08-05
  • 2021-06-20
猜你喜欢
  • 2022-12-23
  • 2021-07-03
  • 2022-12-23
  • 2022-03-01
  • 2022-12-23
  • 2021-11-08
相关资源
相似解决方案