[英]C++ skipping line of code?
我正在用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;
}
}
MKFAHttpRequest Request( std::string( Buffer ) );
這條線不符合你的想法。 您認為它定義了一個名為Request
of MKFAHttpRequest
的對象,並使用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 ));
這個:
MKFAHttpRequest Request( std::string( Buffer ) );
作為C ++中的函數聲明。 試試這個
std::string s( Buffer );
MKFAHttpRequest Request( s );
代替。
就個人而言,我認為最好的解決方案是C ++ 11的統一初始化語法:
MKFAHttpRequest Request{ std::string( Buffer ) };
但是,另一種方法是使用static_cast:
MKFAHttpRequest Request( static_cast<std::string>( Buffer ) };
static_cast將找到一個匹配的構造函數調用std :: string,取char *。 它還清楚地表明,您實際上是從char *“轉換”為std :: string以調用MKFAHttpRequest構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.