C++;跳过代码行? 背景 我正在用C++编写一个多线程的WebSoCulver服务器。p> 问题
当我尝试集成我的HTTP解析器时,C++;跳过代码行? 背景 我正在用C++编写一个多线程的WebSoCulver服务器。p> 问题,c++,gcc,g++,skip,C++,Gcc,G++,Skip,当我尝试集成我的HTTP解析器时,MKFAHTTPRequest请求(std::string(Buffer))在执行期间被完全跳过 我已经清理了项目并添加了-Wall和-Werror(这应该告诉我,Request是一个未使用的变量,但它不是) void运算符()(){ while(true){ 如果(m_Socket->is_open()){ 字符缓冲区[1024]; boost::system::error\u code error; std::cout-write_-some(boost::
MKFAHTTPRequest请求(std::string(Buffer))代码>在执行期间被完全跳过
我已经清理了项目并添加了-Wall和-Werror(这应该告诉我,Request
是一个未使用的变量,但它不是)
void运算符()(){
while(true){
如果(m_Socket->is_open()){
字符缓冲区[1024];
boost::system::error\u code error;
std::cout-write_-some(boost::asio::buffer(std::string(“Hello-World”));
}否则就断了;
}否则就断了;
}
}
这条线并不像你想象的那样。您认为它定义了类型为MKFAHttpRequest
的名为Request
的对象,并使用类型为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 ) };
但是,另一种选择是简单地使用静态_cast:
MKFAHttpRequest Request( static_cast<std::string>( Buffer ) };
MKFAHttpRequest请求(静态_cast(缓冲区)};
static_cast将为std::string找到一个匹配的构造函数调用,使用char*。它还清楚地表明您实际上是“casting”从char*到std::string以调用MKFAHttpRequest构造函数。您做了哪些日志记录来查看它是否真的被跳过,或者例如,只是给出了一个错误?您如何知道它被跳过了?是的,我可以在该行之前和之后执行cout
。如果我在调试器中单步执行此函数,它会在除一个…可能的副本
MKFAHttpRequest Request{ std::string( Buffer ) };
MKFAHttpRequest Request( static_cast<std::string>( Buffer ) };