有人可以解释这个C ++代码行吗?

时间:2013-06-08 04:43:17

标签: c++

抱歉,我是C ++新手。我正在查看一些代码并遇到这行代码:

   string cmd(*iter);

显然变量“cmd”被定义为字符串,但我不理解的部分是括号内的位:(* iter)

我知道“* iter”是一个指针,但是有一个变量声明后跟括号是什么意思?

抱歉这个愚蠢的问题。

4 个答案:

答案 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实例,并初始化为迭代器的值。