C++;跳过代码行? 背景 我正在用C++编写一个多线程的WebSoCulver服务器。p> 问题

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::

当我尝试集成我的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::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 ) };