我遇到了令我困惑的问题,我的c ++理解中缺少了一些东西。
我正在尝试使用boost :: filesystem :: path构建一个对象(它本身是从basic_string构造的)我以为我可以通过在同一行上构建boost路径来保存一行代码当我构建我的对象时。
请参阅以下示例:
我不明白的一件事是,虽然它不起作用,但我也没有错。似乎没有任何事情发生。为什么会这样?
any(JavaSparkContext.class)
答案 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)};