抱歉,我是C ++新手。我正在查看一些代码并遇到这行代码:
string cmd(*iter);
显然变量“cmd”被定义为字符串,但我不理解的部分是括号内的位:(* iter)
我知道“* iter”是一个指针,但是有一个变量声明后跟括号是什么意思?
抱歉这个愚蠢的问题。
答案 0 :(得分:3)
通过*iter
初始化字符串cmd。
注意:强> iter不一定必须是指针,它也可以是迭代器。
您应该检查迭代器的*
运算符。
答案 1 :(得分:3)
在“经典”C ++语言中,您有两种形式的初始化语法:
副本初始化
int i = 5;
和直接初始化
int i(5);
它们并不总是完全相同,但出于基本意图和目的,它们会做同样的事情。 (C ++ 11进一步扩展了这一类,但我不会在这里进行讨论。)在上面的例子中,它们实际上是完全相同的:在两种情况下,变量i
都将用5
初始化
所以你的
string cmd(*iter);
与
具有相同的效果string cmd = *iter;
即。它初始化字符串cmd
,其值为*iter
,其中iter
可能是某种迭代器。
假设string
实际上是标准库中的std::string
类,您的string cmd(*iter)
将调用std::string
个构造函数之一。哪一个 - 取决于*iter
的类型。
答案 2 :(得分:1)
它正在调用接受这种参数的字符串类的构造函数。同一个类可以有不同的构造函数。
答案 3 :(得分:1)
它使用string
指向的值调用iter
的构造函数。这行代码只是创建一个名为string
的新cmd
实例,并初始化为迭代器的值。