在STL scott meyers中发表了令人烦恼的解析

时间:2017-11-30 10:02:00

标签: c++ stl most-vexing-parse

我正在思考第6项,这是关于有效STL:改善您使用标准模板库的50种具体方法的最令人烦恼的解析,作者:Scott Meyers。

ifstream dataFile("ints.dat");
list<int> data(istream_iterator<int>(dataFile), // warning! this doesn't do
               istream_iterator<int>()); // what you think it does

所有这些都很有趣(以自己扭曲的方式),但它并没有帮助我们说出我们想说的内容,即列表对象应该用文件的内容进行初始化。现在我们知道我们要打败的解析,这很容易表达。用括号括起形式参数声明是不合法的,但是使用括号将参数转换为函数调用是合法的,因此通过添加一对括号,我们强制编译器以我们的方式查看事物:

list<int> data((istream_iterator<int>(dataFile)), // note new parens
                istream_iterator<int>0); // around first argument
                                         // to list's constructor

我的问题是作者的意思是什么?    &#34;用括号括起形式参数声明是不合法的,但是用括号括起函数调用的参数是合法的,并且#34;

由于

0 个答案:

没有答案