C++ 为什么"istringstream"名称后使用括号?

C++ Why does "istringstream" use parenthesis after the name?

本文关键字:为什么 istringstream C++      更新时间:2023-10-16

我正在学习一些c++,我学习了从字符串到整数的转换部分。我看了一下代码,上面写着:

istringstream converter(stringVariable);

如果"converter"是一个变量名,那么为什么在它后面使用()?

括号中包含了istringstream构造函数的参数。

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

此初始化语法适用于所有具有带参数构造函数的类型。这是标准的c++对象初始化语法之一,但要注意:在某些情况下,类似的结构可以被解析为函数声明,这是最令人烦恼的解析。这

istringstream mystream();

将被解析为一个函数,即使std::istringstream有一个不接受参数的构造函数

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

请注意,在今天的c++版本(c++ 11)中,最好这样写:

istringstream converter{stringVariable};

这被称为"统一初始化"语法,它的工作原理与带括号的语法基本相同,但永远不会被误认为是函数声明(没有"最烦人的解析")。