用boost :: filesystem :: path作为参数调用C ++构造函数 - 没有任何事情发生

时间:2016-02-28 22:11:10

标签: c++ constructor

我遇到了令我困惑的问题,我的c ++理解中缺少了一些东西。

我正在尝试使用boost :: filesystem :: path构建一个对象(它本身是从basic_string构造的)我以为我可以通过在同一行上构建boost路径来保存一行代码当我构建我的对象时。

请参阅以下示例:

我不明白的一件事是,虽然它不起作用,但我也没有错。似乎没有任何事情发生。为什么会这样?

any(JavaSparkContext.class)

1 个答案:

答案 0 :(得分:5)

这是C ++所谓的"最令人烦恼的解析。"您遇到的问题是:

Test test1(boost::filesystem::path(str));

是名为test1的函数的声明,它返回Test并且接受一个名为boost::filesystem::path的{​​{1}}类型的参数。 str周围的括号被解析为多余的,因此该行被解释为等同于:

str

如果您正在使用C ++ 11进行编译,则可以用大括号替换外括号:

Test test1(boost::filesystem::path str);

Pre-C ++ 11,您可以使用一组额外的括号:

Test test1{boost::filesystem::path(str)};