背景

我正在用 C++ 编写一个多线程的 websocket 服务器。

问题

当我尝试集成我的 HTTP 解析器时,MKFAHTTPRequest Request( std::string( Buffer ) ); 在执行过程中被完全跳过。

我已经清理了项目并添加了 -Wall 和 -Werror(这应该告诉我 Request 是一个未使用的变量,但它不是)。

void operator()(){
    while( true ){
        if( m_Socket->is_open() ){
            char Buffer[1024];

            boost::system::error_code Error;

            std::cout << "MKFAConnection::operator()() - Reading..." << std::endl;
            m_Socket->read_some( boost::asio::buffer( Buffer, sizeof( Buffer ) ), Error );

            if( !Error ){
                // This line is getting skipped!?!?!?
                MKFAHttpRequest Request( std::string( Buffer ) );

                m_Socket->write_some( boost::asio::buffer( std::string( "Hello World" ) ) );

            } else break;

        } else break;

    }

}

最佳答案



这条线不会做你认为它做的事情。您认为它定义了一个名为 RequestMKFAHttpRequest 类型的对象,并使用 std::string 类型的临时对象初始化该对象。

事实上,它声明了一个名为 Request 的函数,它接受一个 std::string 类型的参数并返回一个 MKFAHttpRequest 类型的对象。

这与(或者可能是)最令人烦恼的解析有关。

也许其中之一会让它变得更好:

MKFAHttpRequest Request( (std::string( Buffer )) );
MKFAHttpRequest Request{ std::string( Buffer ) };
MKFAHttpRequest Request = std::string( Buffer );
MKFAHttpRequest Request = MKFAHttpRequest(std::string( Buffer ));

引用:http://en.wikipedia.org/wiki/Most_vexing_parse

关于C++跳过代码行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14774961/

10-09 01:59