小编Kri*_*ato的帖子

为什么一些有经验的程序员会在变量之前写出比较值?

可能重复:
如何检查等于?(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 c++ coding-style

21
推荐指数
6
解决办法
4277
查看次数

Lvalue到rvalue引用绑定

编译器一直在抱怨我试图将左值绑定到右值引用,但我看不出如何.我是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在运算符重载中定义为右值?为什么它被重新解释为左值?

谢谢.

c++ rvalue-reference move-semantics c++11

17
推荐指数
1
解决办法
2万
查看次数

"单片"是什么意思?

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

oop programming-languages terminology class

16
推荐指数
3
解决办法
9736
查看次数

长构造函数初始化列表

你是如何处理它们的?我有一些类(通常持有统计等类),还有一些20+成员变量和初始化列表结束很长,超出页面宽度,如果我没有手动缠绕.你试图打破这样的类或你在一些其他的方式解决这个问题?

它看起来并不很整洁,但有时我写在列表中的变量对方像这样的顶部:

myConstructor(var1, var2, var3, ..., varN) :
 member1(var1),
 member2(var2),
 member3(var3),
 ...
 memberN(varN)
Run Code Online (Sandbox Code Playgroud)

c++ whitespace initialization

11
推荐指数
2
解决办法
7259
查看次数

OpenCV - 在视频播放过程中让滑块更新其位置

我已经选择了"学习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)

c c++ video opencv slider

11
推荐指数
2
解决办法
1万
查看次数

C++类型特征

我知道他们编码有关您实例化它们的类型的信息,但它们如何工作?比如说,类型特征std::is_class.它是如何工作的?所有的实现看起来都像空结构,我必须承认我正在挠头.

这些名称看起来足够描述,所以我可以理解它们的意思,但是什么是使用类型特征的典型场景?

我找不到关于这个主题的介绍性资源(或关于SO的问题).指针将不胜感激.

c++ templates metaprogramming type-traits

11
推荐指数
1
解决办法
1194
查看次数

抛出异常后返回

在异常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)

c++ exception return-value throw

10
推荐指数
1
解决办法
7590
查看次数

中介模式与发布/订阅

有人能指出两者之间的主要区别吗?

似乎至少在概念上,这两者是非常密切相关的.如果我冒险猜测,我会说发布/订阅方法是中介模式的一个子集(因为中介不一定需要以发布/订阅方式使用,但后者似乎需要一种中介宾语).那附近有什么吗?

c++ oop design-patterns mediator publish-subscribe

9
推荐指数
1
解决办法
4085
查看次数

某些Android设备上的UDP丢包严重

我没有结果地搜查了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)

java sockets networking android udp

9
推荐指数
1
解决办法
3078
查看次数

boost :: serialization和循环引用反序列化

我有一个需要序列化的树状结构.典型结构,每个节点都有parent成员和children向量.parent是一个原始的指针到类,childrenvectors的shared_ptrs.目前看来,系列化工作正常,但 -serialization离开parent成员初始化(指针0xcccccccc0x00000000).

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++ serialization boost c++11

8
推荐指数
1
解决办法
882
查看次数