从函数返回常量字符指针

Returning constant character pointer from a function

本文关键字:字符 指针 常量 返回 函数      更新时间:2023-10-16

是否进行

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在该定义所在的非全局命名空间中是不合格的(这是我的偏好)。