C++;以boost::filesystem::path作为参数的构造函数调用-未发生任何事件 我有一个困扰我的问题,我的C++理解中缺少了一些东西。

C++;以boost::filesystem::path作为参数的构造函数调用-未发生任何事件 我有一个困扰我的问题,我的C++理解中缺少了一些东西。,c++,constructor,C++,Constructor,我试图用boost::filesystem::path(它本身是由一个基本的_字符串构造的)来构造一个对象,我想我可以通过在构造对象的同一行上构造boost路径来保存一行代码 请参见下面的示例: 我不明白的一件事是,虽然它不起作用,但我也没有出错。i、 似乎什么也没发生。为什么会这样 class Test { public: Test(boost::filesystem::path in) { std::cout << "Succesful construc

我试图用boost::filesystem::path(它本身是由一个基本的_字符串构造的)来构造一个对象,我想我可以通过在构造对象的同一行上构造boost路径来保存一行代码

请参见下面的示例:

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

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"
}
类测试{
公众:
测试(boost::filesystem::path-in){
std::cout这是C++所谓的“最麻烦的解析”。您遇到的问题是:

Test test1(boost::filesystem::path(str));
是名为
test1
的函数的声明,该函数返回一个
Test
,并接受一个名为
str
boost::filesystem::path
类型的参数。
str
周围的括号被解析为多余,因此该行被解释为等效于:

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

如果使用C++11进行编译,可以将外圆括号替换为大括号:

Test test1{boost::filesystem::path(str)};
在C++11之前,您可以使用一组额外的括号:

Test test1((boost::filesystem::path(str)));
这就是C++所谓的“最麻烦的解析”。您遇到的问题是:

Test test1(boost::filesystem::path(str));
是名为
test1
的函数的声明,该函数返回一个
Test
,并接受一个名为
str
boost::filesystem::path
类型的参数。
str
周围的括号被解析为多余,因此该行被解释为等效于:

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

如果使用C++11进行编译,可以将外圆括号替换为大括号:

Test test1{boost::filesystem::path(str)};
在C++11之前,您可以使用一组额外的括号:

Test test1((boost::filesystem::path(str)));
带警告编译:带警告编译: