可能重复:
如何检查等于?(0 == i)或(i == 0)
为什么人们经常在C#中看到"null!= variable"而不是"variable!= null"?
我一直在看一个奇怪的教程以及一些DirectX代码,并注意到许多有经验的C++程序员用以下方式编写表达式:
(<constant> == <variable>)
Run Code Online (Sandbox Code Playgroud)
而不是我的传统智慧似乎更喜欢:
(<variable> == <constant>)
Run Code Online (Sandbox Code Playgroud)
例如if (NULL == ptr)而不是if (ptr == NULL).我更喜欢第二种选择,如果没有其他原因选择前者,我的理由是变量似乎是表达式的"接收"端.
但我怀疑前者用于避免无意中通过使用=而不是将变量的值赋给变量==.这是对的吗?
编译器一直在抱怨我试图将左值绑定到右值引用,但我看不出如何.我是C++ 11的新手,移动语义等,所以请耐心等待.
我有这个功能:
template <typename Key, typename Value, typename HashFunction, typename Equals>
Value& FastHash<Key, Value, HashFunction, Equals>::operator[](Key&& key)
{
// Some code here...
Insert(key, Value()); // Compiler error here
// More code here.
}
Run Code Online (Sandbox Code Playgroud)
它调用这个方法:
template <typename Key, typename Value, typename HashFunction, typename Equals>
void FastHash<Key, Value, HashFunction, Equals>::Insert(Key&& key, Value&& value)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我不断收到如下错误:
cannot convert argument 1 from 'std::string' to 'std::string &&'
Run Code Online (Sandbox Code Playgroud)
在Insert()调用上.是不是key在运算符重载中定义为右值?为什么它被重新解释为左值?
谢谢.
I've seen it in the context of classes. I suspect it means that the class could use being broken down into logical subunits, but I can't find a good definition. Could you give some examples?
Thanks for the help.
Edit: I love the smart replies, but I'm obviously referring to "monolithic" within a software context. I know about monoliths, megaliths, dolmens, and all the stone-related contexts. Gee, I have enough of them in my country...
你是如何处理它们的?我有一些类(通常持有统计等类),还有一些20+成员变量和初始化列表结束很长,超出页面宽度,如果我没有手动缠绕.你试图打破这样的类或你在一些其他的方式解决这个问题?
它看起来并不很整洁,但有时我写在列表中的变量对方像这样的顶部:
myConstructor(var1, var2, var3, ..., varN) :
member1(var1),
member2(var2),
member3(var3),
...
memberN(varN)
Run Code Online (Sandbox Code Playgroud) 我已经选择了"学习OpenCV"并尝试了一些代码示例/练习.在这段代码中,我想让滑块在每次视频帧更改时更新其位置,但由于某种原因它不起作用(图片冻结时使用以下代码):
#include "cv.h"
#include "highgui.h"
int g_slider_position = 0;
CvCapture* g_capture = NULL;
void onTrackbarSlide(int pos)
{
cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos);
}
int main(int argc, char** argv)
{
cvNamedWindow("The Tom 'n Jerry Show", CV_WINDOW_AUTOSIZE);
g_capture = cvCreateFileCapture(argv[1]);
int frames = (int) cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT
);
if (frames != 0)
{
cvCreateTrackbar(
"Position",
"The Tom 'n Jerry Show",
&g_slider_position,
frames,
onTrackbarSlide
);
}
IplImage* frame;
while (1)
{
frame = cvQueryFrame(g_capture);
if (!frame)
break;
cvSetTrackbarPos(
"Position",
"The Tom 'n Jerry Show",
++g_slider_position …Run Code Online (Sandbox Code Playgroud) 我知道他们编码有关您实例化它们的类型的信息,但它们如何工作?比如说,类型特征std::is_class.它是如何工作的?所有的实现看起来都像空结构,我必须承认我正在挠头.
这些名称看起来足够描述,所以我可以理解它们的意思,但是什么是使用类型特征的典型场景?
我找不到关于这个主题的介绍性资源(或关于SO的问题).指针将不胜感激.
在异常return之后,它对任何值都有益throw吗?如果没有,可以return省略语句,是否有可能删除编译器错误C4715: not all control paths return a value?
提前致谢.
编辑:(示例代码)
for (ushort i = 0; i < itsNumUnits; ++i)
if (unitFormation[i] == unit)
{
return unitSetup[i];
}
else
throw unit;
return 0;
Run Code Online (Sandbox Code Playgroud) 有人能指出两者之间的主要区别吗?
似乎至少在概念上,这两者是非常密切相关的.如果我冒险猜测,我会说发布/订阅方法是中介模式的一个子集(因为中介不一定需要以发布/订阅方式使用,但后者似乎需要一种中介宾语).那附近有什么吗?
我没有结果地搜查了interwebz.我们正面临着一些Android设备遭遇严重丢包的问题.为了给出一些背景知识,应用程序连接到特定的Wifi并查找在端口17216上广播的UDP数据包.这些数据包的大小为832字节,不包括包装的标头,并以每秒四个的常规速率发送.
我们只在两台设备上遇到了问题,一台低端的Turbox Rubik II平板电脑和一台ASUS Memo Pad HD 7.我们测试过的其他设备(手机和平板电脑)都按照规定的时间间隔收集数据包.
接收数据包的功能如下:
public void run()
{
while (isUDPServerRunning)
{
try
{
socket.receive(packet);
ProcessRawPacketData();
DisplayLoggingInfo();
}
catch (IOException e)
{
Log.e("receive", e.getMessage());
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个部分Runnable.这样创建套接字:
byte[] buffer = new byte[1024];
DatagramSocket socket;
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
Run Code Online (Sandbox Code Playgroud)
在onCreate()我们的Service扩展方法中初始化套接字:
socket = new DatagramSocket(SERVERPORT);
Run Code Online (Sandbox Code Playgroud)
Wifi模块正在接收数据包.我们已经确认通过生根其中一个设备并安装数据包嗅探器,因此问题必须以某种方式与代码相关.
在受影响的设备上,数据包被正确接收几秒钟,然后完全丢失持续几秒钟,因此我估计损失超过50%.
任何帮助将非常感激.我们正在拔头发.
更新我错误的数据包嗅探器.似乎数据包嗅探器也在root设备上丢失了几个相关的数据包.但有时候,只需启动数据包嗅探器即可解决问题!如下所示打开/关闭蓝牙似乎没有什么区别.这可能是另一个硬件问题吗?
更新2这是我socket.receive()在线后立即打印的日志示例.注意它如何跳过半分钟的数据包,然后工作几秒钟.
05-25 15:44:38.670: D/LOG(4393): Packet Received
05-25 15:44:38.941: D/LOG(4393): Packet Received
05-25 15:45:09.482: …Run Code Online (Sandbox Code Playgroud) 我有一个需要序列化的树状结构.典型结构,每个节点都有parent成员和children向量.parent是一个原始的指针到类,children是vectors的shared_ptrs.目前看来,系列化工作正常,但德 -serialization离开parent成员初始化(指针0xcccccccc或0x00000000).
该parent成员被加载时,实际的父对象尚未完成反序列化,即孩子的parent成员是通过父母的反序列化要求装children.由于这是循环的,我想知道我是否需要采取特殊措施才能发挥作用.
谢谢您的帮助.
更新:这是我的序列化功能的样子:
template <typename Archive>
void serialize(Archive& archive, GameCore::GameObject& t, const unsigned int version)
{
archive & boost::serialization::base_object<GameCore::Object>(t);
archive & boost::serialization::base_object<GameCore::Updatable>(t);
archive & t.parent;
archive & t.transform;
archive & t.components;
archive & t.children;
}
Run Code Online (Sandbox Code Playgroud)
如果我发表评论archive & t.children,parent则会正确填充.
更新2:好的,我已经设法把它变成了一个展示问题的最小样本.以下应编译:
#include <boost\archive\binary_oarchive.hpp>
#include <boost\archive\binary_iarchive.hpp>
#include <fstream>
#include <memory> …Run Code Online (Sandbox Code Playgroud) c++ ×8
c ×2
c++11 ×2
oop ×2
android ×1
boost ×1
class ×1
coding-style ×1
exception ×1
java ×1
mediator ×1
networking ×1
opencv ×1
return-value ×1
slider ×1
sockets ×1
templates ×1
terminology ×1
throw ×1
type-traits ×1
udp ×1
video ×1
whitespace ×1