从函数返回常量字符指针
Returning constant character pointer from a function
是否进行
const char * const getName () const
{
return name ;
}
意味着getName()
返回一个指向常量字符的常量指针?由于函数是常量,因此它不会修改任何参数。
这意味着getName()
返回一个指向常量字符的常量指针,并且它不会修改函数体内任何不可变的类成员
请注意,声明为可变的类成员仍然可以在此函数中进行修改。
您的示例
const char * const getName() const { return name; }
很可能会返回一个常量指针,指向一个以null结尾的常量字符字符串(即,指向此类字符串中的第一个字符)。从技术上讲,它只是指向char
的指针。但是这样的指针被例如cout
处理为指向空终止字符串的指针。
由于该方法被声明为const
,它不能直接修改普通的非mutable
成员,但它可以修改作为指针的成员所指向的数据。这意味着,从技术上讲,它可以修改被视为其调用对象的一部分的东西,如果这些东西被声明为mutable
或由指针指向。然而,const
方法的常见约定是,即使它进行了一些内部更改,如更新缓存,它也不会更改对象的外部可见状态,即从外部视图来看,它似乎不会更改对象。
对于C++,
优先使用诸如
std::string
之类的字符串类,特别是为了避免动态分配内存的寿命管理问题。不要使用
get
前缀,因为在C++中,它们只会添加更多要读取的内容(例如,你会写getSin(x)*getCos(x)
吗?)。更一般地说,命名事物,使调用代码读起来像英文散文!:-)你可以把它看作是设计一种小语言。一般来说,不要在返回值的顶层添加
const
,因为这会阻止移动优化。
此外,通常使用成员命名约定,如name_
(请注意,下划线位于末尾,而不是前面处,以避免与C命名约定冲突)或myName
。
因此,在C++中,该函数通常被编码为
string name() const { return name_; }
假设CCD_ 15在该定义所在的非全局命名空间中是不合格的(这是我的偏好)。
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将(N 个字节)无符号字符指针转换为浮点数和双 C++
- 字符指针的 Qt 数组
- C++将常量字符* 指针数组传递给对象
- 为什么不能将字符指针定义为数组?
- 在函数内初始化无符号字符指针将返回空指针
- 将字符指针存储到容器中
- 为什么 strtok_r() 只接受字符数组而不接受字符指针
- 字符指针数组内存分配
- 字符指针不递增?
- 如何在C++中使用字符指针
- 确保字符指针始终指向相同的字符串文字
- C++中的字符指针
- 使用unique_ptr的常量字符指针
- 字符指针不断意外更改
- 将字符指针中的十六进制转换为十进制
- 如何将字符*(字符指针)转换为 PCSZ?
- 在向量中存储字符指针
- 字符指针具有不同的值