C ++ const成员函数返回一个指针

皮尔佩尔

即使可以将返回的(指针)数据成员用于该方法的“外部”以更改其引用对象,将方法标记为const是否被认为是不好的做法?

看一下bone()方法。

class SceneNode
{
public:
    SceneNode(const char *nodeName, SceneNode *parent);
    ~SceneNode();

    void setBone(Bone *bone);
    Bone* bone() const { return _bone; }
};

private:
    Bone *_bone;
};

我问这个问题是因为对我来说有点奇怪,因为如果_bone不是指针而是对象,则该方法不能为const(当然,除非它返回const引用或副本)。

瑞安·海宁(Ryan Haining)

它取决于,例如,unique_ptr::operator*()被标记为const,但不会在其返回的引用中添加其他const。这是有道理的,因为它类似于能够修改a指向的内容,T *const但不能更改指针本身。

const std::unique_ptr<int> uptr(new int); // make_unique is better
*uptr = 1; // sure, I can modify what it points to
uptr.reset(); // no, this modifies the pointer itself (conceptually)

另一方面,诸如std::string拥有char& operator[](size_t) const;这样的东西会很奇怪,因为其中的chars应该像它们所引用的对象的一部分一样起作用(string类)

const std::string s{"hello world"}; // I expect this to always be "hello world"
s[0] = 'a'; // error, you're conceptually modifying the string

由您决定在API中什么才有意义,以及何时类是“道德常量”。如果你有

void fun(const SceneNode& node);
int main() {
    SceneNode n(...);
    Bone b;
    n.setBone(&b);
    fun(n);
    assert(*n.bone() == b); // is this a safe assumption?
}

如果您认为断言应始终成立,请返回const Bone*

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ const成员函数返回一个指针

来自分类Dev

C++ 在非 const 指针函数中返回一个 const 指针

来自分类Dev

当给定`const char *`作为第一个参数时,C标准库函数`strchr`如何返回指向非const的指针?

来自分类Dev

C/C++ 如何在一个函数调用中传递一个 const 函数指针或一个简单的指针

来自分类Dev

C ++:如何将指针传递给另一个类的成员函数?

来自分类Dev

C ++如何将成员函数指针传递给另一个类?

来自分类Dev

返回一个指针但不允许删除该指针的C ++类公共函数?

来自分类Dev

C ++重载两次getter,一个返回指针,另一个const引用,失败

来自分类Dev

C ++模板的部分专业化通过一个指针函数/一个const指针函数有没有不同?

来自分类Dev

C ++返回另一个函数的指针正在复制它吗?valgrind抱怨

来自分类Dev

c ++函数创建一个二维数组并返回一个指向二维数组的指针

来自分类Dev

C ++函数调用缺少参数列表;使用'&Runner :: runTask'创建一个指向成员的指针

来自分类Dev

非标准语法;使用“&”创建一个指针成员。显示函数 C++ 出错

来自分类Dev

C一个返回数组的函数

来自分类Dev

C ++:通过一个初始化函数对多个数据成员进行const初始化

来自分类Dev

如何在python中实现等效于C ++类成员的功能,该成员返回指向另一个类的指针?

来自分类Dev

C++ typedef 函数指针并在一个语句中声明一个指针

来自分类Dev

C ++返回一个char指针并打印

来自分类Dev

C从函数返回const char指针或char指针

来自分类Dev

C / C ++指向POD结构的指针也指向第一个结构成员

来自分类Dev

成员函数指针c ++

来自分类Dev

C-在函数中声明一个函数并返回

来自分类Dev

在C中创建一个通用的“函数指针”联合是一个坏主意吗?

来自分类Dev

C ++:如何返回指向非静态成员函数的指针?

来自分类Dev

在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

来自分类Dev

引用函数中另一个指针的C指针

来自分类Dev

ANSI C-一个函数可以返回另一个函数吗?

来自分类Dev

C / C ++:使用类型定义的函数指针来*声明*一个函数

来自分类Dev

从 C++ 中的函数返回一个对象

Related 相关文章

  1. 1

    C ++ const成员函数返回一个指针

  2. 2

    C++ 在非 const 指针函数中返回一个 const 指针

  3. 3

    当给定`const char *`作为第一个参数时,C标准库函数`strchr`如何返回指向非const的指针?

  4. 4

    C/C++ 如何在一个函数调用中传递一个 const 函数指针或一个简单的指针

  5. 5

    C ++:如何将指针传递给另一个类的成员函数?

  6. 6

    C ++如何将成员函数指针传递给另一个类?

  7. 7

    返回一个指针但不允许删除该指针的C ++类公共函数?

  8. 8

    C ++重载两次getter,一个返回指针,另一个const引用,失败

  9. 9

    C ++模板的部分专业化通过一个指针函数/一个const指针函数有没有不同?

  10. 10

    C ++返回另一个函数的指针正在复制它吗?valgrind抱怨

  11. 11

    c ++函数创建一个二维数组并返回一个指向二维数组的指针

  12. 12

    C ++函数调用缺少参数列表;使用'&Runner :: runTask'创建一个指向成员的指针

  13. 13

    非标准语法;使用“&”创建一个指针成员。显示函数 C++ 出错

  14. 14

    C一个返回数组的函数

  15. 15

    C ++:通过一个初始化函数对多个数据成员进行const初始化

  16. 16

    如何在python中实现等效于C ++类成员的功能,该成员返回指向另一个类的指针?

  17. 17

    C++ typedef 函数指针并在一个语句中声明一个指针

  18. 18

    C ++返回一个char指针并打印

  19. 19

    C从函数返回const char指针或char指针

  20. 20

    C / C ++指向POD结构的指针也指向第一个结构成员

  21. 21

    成员函数指针c ++

  22. 22

    C-在函数中声明一个函数并返回

  23. 23

    在C中创建一个通用的“函数指针”联合是一个坏主意吗?

  24. 24

    C ++:如何返回指向非静态成员函数的指针?

  25. 25

    在C ++中声明const对象需要用户定义的默认构造函数。如果我有一个可变的成员变量,为什么不呢?

  26. 26

    引用函数中另一个指针的C指针

  27. 27

    ANSI C-一个函数可以返回另一个函数吗?

  28. 28

    C / C ++:使用类型定义的函数指针来*声明*一个函数

  29. 29

    从 C++ 中的函数返回一个对象

热门标签

归档