我有一个使我感到困惑的问题,我的C ++理解中缺少一些东西。
我正在尝试使用boost :: filesystem :: path(它本身是由basic_string构造)构造一个对象,我认为我可以通过在与构造相同的一行上构造boost路径来保存一行代码我的对象。
请参阅以下示例:
我不明白的一件事是,尽管它不起作用,但我也没有收到任何错误。即似乎什么也没发生。为什么会这样呢?
class Test {
public:
Test(boost::filesystem::path in) {
std::cout << "Succesful construction" << std::endl;
}
};
int main() {
std::string str("asdf.txt");
boost::filesystem::path p(str);
Test test1(boost::filesystem::path(str)); // Nothing at all happens, but no error
Test test2(p); // "Succesful construction"
}
这就是C ++所谓的“最烦人的解析”。您遇到的问题是:
Test test1(boost::filesystem::path(str));
是对的函数的声明,该函数test1
返回aTest
并接受一个boost::filesystem::path
名为的类型的参数str
。圆括号str
被解析为多余,因此该行被解释为等效于:
Test test1(boost::filesystem::path str);
如果使用C ++ 11进行编译,则可以将大括号替换为大括号:
Test test1{boost::filesystem::path(str)};
在C ++ 11之前的版本中,您可以使用一组额外的括号:
Test test1((boost::filesystem::path(str)));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句