我正在查看针对典型生产者/消费者问题的Qt特定C ++ solution。这是制作人的代码:
class Producer : public QThread
{
public:
void run()
{
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
for (int i = 0; i < DataSize; ++i) {
freeBytes.acquire(); // (1)
buffer[i % BufferSize] = "ACGT"[(int)qrand() % 4]; // (2)
usedBytes.release();
}
}
};
我无法理解for
循环中的第二行。 "ACGT"[*]
语法。它究竟做了什么?这个Qt是特定的还是我不知道的这个C ++语法?
PS:完整源代码here
答案 0 :(得分:5)
它生成一个随机字符:A,C,G,T。
Literal "ACGT"
是一个char const [5]
类型的数组,然后[(int)qrand() % 4]
是一个0到3范围内的随机索引,包括。
答案 1 :(得分:4)
“ACGT”[*]语法。它到底做了什么?
qrand() % 4
是0到3之间的随机数。该随机数用作字符串"ACGT
“的索引。因此整个表达式产生随机字符A,C,G或T概率相等。