我正在学习一些 C++,然后我学习了从字符串和整数转换的部分。我正在查看代码,它说的是:
istringstream converter(stringVariable);
如果“converter”是一个变量名,那为什么在它后面加上()呢?
我正在学习一些 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};
这被称为“统一初始化”语法,它与带括号的语法非常相似,但永远不会被误认为是函数声明(没有“最麻烦的解析”)。