[英]Strange behaviour with getIntegerv() and std::cout
这段代码:
#include <iostream>
#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
int main(void)
{
GLint version;
glGetIntegerv(GL_MAJOR_VERSION, &version);
std::cout << version << std::endl;
//(Un)comment the next line
//std::cout << "" << version << std::endl;
glfwTerminate();
return 0;
}
输出:
32766
要么
0
0
分别在该行被注释或未注释时。
我知道您必须先使用某些方法初始化glfw和glew库(使用glfw进行初始化,但是这种情况仍在发生),但是...上一行如何更改注释或取消注释下一行的行为? 机器过去并执行上一行吗? 我的天啊
PS:我知道什么是“不确定行为”,但这并不意味着您可以打破物理学定律,追溯过去并修改某些方法的行为。
我知道在使用某些方法之前必须先初始化glew库,但是...上一行如何更改其行为注释或取消注释下一行的行为?
因为这就是未定义行为中 “未定义”的含义。
当您在没有当前GL上下文的情况下调用GL函数时,可能会发生任何事情。 因此,您在GL端具有未定义的行为。 但是,在现实世界中,大多数实现在那种情况下什么都不做,因此不会写入version
,并且您正在打印未初始化变量的内容,因此您在C ++端具有未定义的行为。 在现实世界中,您很可能会打印堆栈的某些内容,并通过更改代码来更改已编译的结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.