c++ - 我不能在一行中多次调用 rand() 吗?
问题描述
for (int i = 0; i < 12; i++) {
Vertex v;
v.pos = (glm::vec3)((GLfloat)(rand() % 100) / 50 - 1, (GLfloat)(rand() % 100) / 50 - 1, (GLfloat)(rand() % 100) / 50 - 1);
v.col = (glm::vec3)((GLfloat)(rand() % 100) / 100, (GLfloat)(rand() % 100) / 100, (GLfloat)(rand() % 100) / 100);
tri4.objData.vertices.push_back(v);
std::cout << tri4.objData.vertices.at(i).pos.x <<"\t" <<i4.objData.vertices.at(i).pos.y<<"\t"<< tri4.objData.vertices.at(i).pos.z << "\n\n";
std::cout << tri4.objData.vertices.at(i).col.x << "\t" << tri4.objData.vertices.at(i).col.y << "\t" << tri4.objData.vertices.at(i).col.z << "\n\n";
tri4.objData.indices.push_back(i);
std::cout << tri4.objData.indices.at(i) << '\n';
}
这是我在这种情况下的 GL 代码,pos.x 和 pos.y 是相同的。这三个 rand() 在“v.pos=”行或“v.col=”行返回相同。我做到了t 使用 srand(time) 或其他东西。rand()s 在一行上返回相同的值吗?还是 vec3 有问题?
解决方案
是的,函数的每次调用都被视为一个单独的调用,具有(很可能)不同的结果。
您可以使用任何功能验证这一点,例如:
#include <iostream>
int getVal() {
static int val = 0;
return ++val;
}
int main() {
std::cout << getVal() * getVal() * getVal() << '\n';
}
这会给你1 * 2 * 3
,或6
。
推荐阅读
- r - 如何在 Shiny 仪表板中以特定时间间隔将新行绑定到数据表?
- php - wp_mail() 方法在某些情况下不发送电子邮件
- spring - 如何使用 Spring Cloud 配置具有加密属性的自定义属性文件?
- d3.js - 缩放 SVG 坐标,但不缩放元素
- javascript - 如何找出阻止 Node.js 退出的原因?
- sql - SSRS 中的排序规则冲突
- spring - 使用 Spring Caching Annotations 时向 Cache 键添加常量自定义前缀
- d3.js - 在graphviz中增加等级间距
- react-native - 用文本反应原生相机图像
- c - 确保 scanf 只读取 dd.mm.yyyy