【问题标题】:Returning constant character pointer from a function从函数返回常量字符指针
【发布时间】:2012-11-12 08:39:35
【问题描述】:

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

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

【问题讨论】:

    标签: c++ pointers constants const-pointer


    【解决方案1】:

    你的例子,

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

    最有可能返回一个常量指针,指向一个以空字符结尾的常量字符串(即此类字符串中的第一个字符)。从技术上讲,它只是一个指向char 的指针。但是这样的指针被视为指向空终止字符串的指针,例如cout.

    由于方法被声明为const,它不能直接修改普通的非mutable成员,但它可以修改指针成员指向的数据。这意味着从技术上讲,它可以修改被视为调用它的对象的一部分的东西,如果这些东西被声明为mutable 或被指针指向。但是,const 方法的常见约定是,即使它进行了一些内部更改(例如更新缓存),它也不会更改对象的外部可见状态,即从外部视图它会似乎没有改变对象。

    对于 C++,

    • 优先使用字符串类,例如std::string,尤其是为了避免动态分配内存的生命周期管理问题。

    • 不要使用 get 前缀,因为在 C++ 中它们只会添加更多要读取的内容(例如,你会写 getSin(x)*getCos(x) 吗?)。更一般地,命名事物,使 调用 代码读起来像英文散文! :-) 您可以将其视为设计一种小语言。

    • 一般来说,不要在返回值的顶层添加const,因为这会妨碍移动优化。

    此外,通常使用成员命名约定,例如 name_(请注意,下划线位于 end,而不是 front,以避免与C 命名约定)或myName

    因此,在 C++ 中,该函数通常会被编码为

    string name() const { return name_; }
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-13
        • 2011-01-21
        • 1970-01-01
        • 2011-06-17
        • 1970-01-01
        • 2019-04-01
        • 2015-01-02
        • 1970-01-01
        相关资源
        最近更新 更多