从函数返回常量字符指针

时间:2012-11-24 04:28:09

标签: c++ pointers constants const-pointer

const char * const getName () const
{ 
   return name ;
}

表示getName()返回一个常量字符的常量指针?由于函数是常量,因此不会修改任何参数。

2 个答案:

答案 0 :(得分:4)

这意味着getName()返回一个指向常量字符的常量指针,它不会修改函数体内任何不可变的类成员。
请注意,在此函数中仍可以修改声明为mutable的类成员。

答案 1 :(得分:3)

你的例子,

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_(请注意,下划线位于 end ,而不是,以避免与C命名约定冲突)或myName

因此,在C ++中普通的函数将被编码为

string name() const { return name_; }

假设string在此定义所在的非全局命名空间中是不合格的(这是我的偏好)。