c++ - 为什么我们为glfwCreateWindow使用指针? -OpenGL

标签 c++ pointers

我目前正在学习OpenGL,我对C++还是很陌生。我的问题是为什么在这里使用指针。

GLFWwindow *mainWindow = glfwCreateWindow(WIDTH, HEIGHT, "Test Window", NULL, NULL);

我知道了什么是指针,而不是为什么在这里使用它们。所有的答案表示赞赏,谢谢。

最佳答案

glfwCreateWindow()没有固有的必要返回指向窗口的指针,而不是返回实际的窗口。可能已经设计了OpenGL库,以使代码看起来有所不同,例如:

GLFWwindow mainWindow = glfwCreateWindow(WIDTH, HEIGHT, "Test Window", nullptr, nullptr);

或者实际上,仅使用GLFWindow的构造:
GLFWwindow mainWindow { WIDTH, HEIGHT, "Test Window", nullptr, nullptr }; 

尽管如此,采用这种方式设计API的原因可能有几个:
  • 在C++ 2017之前,不需要编译器执行RVO - return value optimization。这意味着,如果您的函数返回类型为T的值,则从理论上讲,您可能需要将在函数内创建的T复制到调用该函数的代码的目标位置。在您的情况下-返回GLFWwindow可能需要复制GLFWwindow;这对于库可能是有问题的(我不知道OpenGL,所以我不知道)。
  • 当您的函数返回T*时,指向的对象可以是“为T”的任何对象-表示从T(!)继承的任何类型。而如果您返回一个简单的T-您将无法返回继承类型。因此,如果存在一个GLFWwindow的类层次结构,它们都从GLFWwindow继承为基类-可以返回指向该基类的指针,以便您进行一般处理。


  • PS-具有五个构造函数参数,并传递使不清楚哪个构造函数参数被设置的参数是有问题的设计。具体来说-我们无法说出第一个nullptr的含义,也无法分辨出第二个nullptr的区别。

    关于c++ - 为什么我们为glfwCreateWindow使用指针? -OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57982836/

    相关文章:

    c++ - 在 C++ 中,传递给函数的指针的更改是否反射(reflect)在调用函数中?

    c - 难以理解函数指针

    c++ - 在堆上初始化 vector of vector

    c++ - 使用数据文件排序计算时遇到问题

    c++ - 尝试/捕获整个程序

    c - 指针ABC。错误: invalid type argument of unary ‘*’ (have ‘struct config’ )

    c++ - Node.js、SQLite 和 C++

    c++ - C/C++ 中可中断的命名范围

    c - 递归反转一个句子代码。为什么常量指针指向常量字符?

    c - C中常量指针的奇怪行为