const type qualifier in class member function
主要是简单解释一下为什么要写这样一个函数,这两个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;
}
分类:
言必称标准之--C/C++
标签:
C/C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述