我在分析以下代码时遇到问题:
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
,而stringList
是List<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
答案 0 :(得分:3)
它是一个矢量/字符串列表。字符串是一系列字符。因此,索引运算符([])可能会提供对字符串的单个字符的访问。
415 因此检查字符串的第一个字符, 417 从第二个字符串访问子字符串到最后。
答案 1 :(得分:1)
据推测,args_[argI]
是字符串类型,字符串类型重载[]
以访问字符串中的字符。
因此,这会查找-flibble
形式的选项;第一个标记的行检查参数是以-
开头,第二个是optionName
指向flibble
。
答案 2 :(得分:1)
您有一维向量args_
,其中每个元素都是T
类型。现在,似乎这种类型T
是一个字符串(字符串类型或指向C风格字符串的指针),其元素可以使用索引运算符[]进行访问。
因此,它实际上并不像“2D阵列那样被访问”。相反,每个项目都作为一维数组进行访问,结果对象将被转换为索引。
因此,假设T
为char*
(对文本字符串有意义),这将使args_[argI]
成为char*
类型的元素,它是指向字符串的指针。然后将此字符串编入索引作为数组,以便args_[argsI][1]
引用名为argI
的向量中args_
字符串中的第二个字符。