我收到以下编译器¹消息
main.cpp: In instantiation of ‘void fkt(Foo) [with Foo = int]’:
main.cpp:5:7: required from here
Run Code Online (Sandbox Code Playgroud)
无论如何都会创建二进制文件,所以这不是错误.但它也没有被标记为警告.这是什么信息,为什么我会得到它?
我将代码缩减为以下示例
template <typename Foo>
void fkt(Foo f) {}
int main() {
fkt(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
¹ 的gcc 4.7.2
编辑:这里重现的步骤:
% cat main.cpp
template <typename Foo>
void fkt(Foo f) {}
int main() {
fkt(1);
return 0;
}
% g++ -Wall -Wextra main.cpp
main.cpp: In instantiation of ‘void fkt(Foo) [with Foo = int]’:
main.cpp:5:7: required from here
main.cpp:2:6: warning: unused parameter ‘f’ [-Wunused-parameter]
Run Code Online (Sandbox Code Playgroud) 我的目标是分两步从UDP套接字读取数据.问题是如果我向套接字写入的数据多于第一步中读取的数据.结果是剩下的数据消失了.
我将代码缩减为以下代码段:
#include <boost/asio/ip/udp.hpp>
using namespace boost::asio;
int main() {
io_service net_io;
ip::udp::socket net_sock( net_io, ip::udp::endpoint( ip::udp::v4(), 1234 ) );
uint8_t data[2];
net_sock.receive( buffer( data, 2 ) );
std::cout << data[0] << data[1] << std::endl;
net_sock.receive( buffer( data, 2 ) );
std::cout << data[0] << data[1] << std::endl;
net_sock.close();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
当我将数据写入套接字时,如下所示:
echo '0123456789' | nc -u localhost 1234
Run Code Online (Sandbox Code Playgroud)
程序输出前两个字节01然后阻塞.相反,我期望输出:
01
23
Run Code Online (Sandbox Code Playgroud)
但是,它在第二次receive()通话时阻止.根据
手册:
该调用将阻塞,直到满足下列条件之一为止:
∙提供的缓冲区已满.[...]
∙发生错误.
为什么缓冲区为空?如果我发射
echo '0123456789' | nc -u localhost …Run Code Online (Sandbox Code Playgroud)