这是什么语法:“ACGT”[(int)qrand()%4]

时间:2014-05-13 07:20:13

标签: c++ qt

我正在查看针对典型生产者/消费者问题的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

2 个答案:

答案 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概率相等。