数组/列表及其维度

时间:2013-11-27 14:29:55

标签: c++ arrays list

我在分析以下代码时遇到问题:

 for (int argI = 1; argI < args_.size(); ++argI) //size(): Return the number of 
 {                                       //arguments.
      argListString += ' ';         //Space into string
      argListString += args_[argI]; //new argument into string

      if (args_[argI][0] == '-')    // ????
      {
           const char *optionName = &args_[argI][1];   //????

我的问题是标有????的行。当我查找对象args_时,它的类型为stringList,而stringListList<T>的模板类。 List<T>定义为

Template<class T> 
class Foam::List< T > 
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bounds checking, etc. Storage is allocated on free-store during
construction.

因此,如果args_是一维数组,为什么它会像第415和417行中的2D数组那样被访问?

问候 streight

3 个答案:

答案 0 :(得分:3)

它是一个矢量/字符串列表。字符串是一系列字符。因此,索引运算符([])可能会提供对字符串的单个字符的访问。

415 因此检查字符串的第一个字符, 417 从第二个字符串访问子字符串到最后。

答案 1 :(得分:1)

据推测,args_[argI]是字符串类型,字符串类型重载[]以访问字符串中的字符。

因此,这会查找-flibble形式的选项;第一个标记的行检查参数是以-开头,第二个是optionName指向flibble

答案 2 :(得分:1)

您有一维向量args_,其中每个元素都是T类型。现在,似乎这种类型T是一个字符串(字符串类型或指向C风格字符串的指针),其元素可以使用索引运算符[]进行访问。

因此,它实际上并不像“2D阵列那样被访问”。相反,每个项目都作为一维数组进行访问,结果对象将被转换为索引。

因此,假设Tchar*(对文本字符串有意义),这将使args_[argI]成为char*类型的元素,它是指向字符串的指针。然后将此字符串编入索引作为数组,以便args_[argsI][1]引用名为argI的向量中args_字符串中的第二个字符。