C ++为什么“istringstream”在名称后面使用括号?

时间:2013-06-09 22:46:48

标签: c++

我正在学习一些C ++,并且我学习了从字符串和整数转换的部分。我在查看代码,它说的是:

istringstream converter(stringVariable);

如果“converter”是变量名,那么为什么要在它之后使用?(

3 个答案:

答案 0 :(得分:6)

括号将参数括在istringstream constructor

istringstream converter(stringVariable);
//                            ^^ variable being passed as argument to the
//                               istringstream constructor

此初始化语法适用于具有参数的构造函数的所有类型。这是标准的C ++对象初始化语法之一,但要注意:在某些情况下,类似的结构可以解析为函数声明,即所谓的the most vexing parse。所以这个

istringstream mystream();

将被解析为一个函数,尽管std::istringstream有一个不接受任何参数的构造函数。

答案 1 :(得分:2)

因为这是你调用istringstream实例的构造函数的方式。

答案 2 :(得分:1)

请注意,在今天的C ++版本(C ++ 11)中,最好将其写为:

istringstream converter{stringVariable};

这称为“统一初始化”语法,它与带括号的语法大致相同,但永远不会被误认为是函数声明(没有“最令人烦恼的解析”)。