小编Sig*_*erm的帖子

"和"/"或"代替"&&"/"||" 在C++代码中 - 编译器功能还是程序员的错?

可能重复:
或者无效C++:为什么这段代码会编译?

你好.

我最近遇到了别人写的不寻常的C++代码:

bool operator != (Point p1, Point p2)
{
    return p1.X != p2.X or p1.Y != p2.Y or p1.Z != p2.Z;
};
Run Code Online (Sandbox Code Playgroud)

据我所知or,即使是宏,也没有在任何地方声明.and代码中也很少有.因此,项目不构建在VC2008 Express上.给我代码的人说作者一直在使用mingw编译器.

问题:这是一个非标准的编译器功能(我怀疑它),这是新的C++标准的一部分(我没有看过C++ 0x),或者这是程序员的问题(如果这个人搬家了)来自pascal,他可能一直在使用和/或代替&&/ ||因为习惯,或者因为他认为它更"可读".

c++

5
推荐指数
1
解决办法
1152
查看次数

c ++ 03:std :: map中内置类型的默认构造函数

我一直以为代码如下

std::map<int, int> test;
std::cout << test[0] << std::endl;
Run Code Online (Sandbox Code Playgroud)

会打印随机值,因为它会在map中创建单位化值.但是,事实证明,创建的int实际上总是初始化为零,并且标准内置类型在某些情况下也是零初始化的.

问题是:当对标准类型(int/char/float/double/size_t)执行零初始化时?我很确定,如果我int i;在不知名的地方宣布,它将包含随机数据.

PS问题是关于C++ 03标准.问题的原因是,现在我不再确定何时必须为内置类型(如int/float/size_t)提供初始化,或者可以安全地省略它.

c++ stdmap c++03

5
推荐指数
1
解决办法
1629
查看次数

CMake:使用自定义工具输出生成标题

我正在将一些晦涩的库从自动工具移植到cmake。

有问题的库将编译自定义工具,该工具将标头输出到stdout,此标头稍后将在项目中使用。

我该如何移植到cmake?

我可以使用编译“ header generator”

add_executable(generator generator.c)
Run Code Online (Sandbox Code Playgroud)

但是如何运行它并使用cmake将其输出重定向到头文件?我当然也需要依赖项处理...(即,如果generator.c更改了,必须重新编译generator并且必须重新生成标头)。

cmake

5
推荐指数
1
解决办法
5530
查看次数

智能指针/编码模式的名称

最近我经常遇到需要类似于这种数据结构的情况.

限制:C++ 03标准.


 +-----+--------------+               +----+
 |node0| NodeDataRef ->-------------->|data|
 +-----+--------------+               +----+
 +-----+--------------+                ^^ ^
 |node1| NodeDataRef ->----------------+| |
 +-----+--------------+                 | |
 +-----+--------------+                 | |
 |node2| NodeDataRef ->-----------------+ |
 +-----+--------------+                   |
                                          |
 +-----+--------------+                   |
 |root | RootDataRef ->-------------------+
 +-----+--------------+              
Run Code Online (Sandbox Code Playgroud)
  1. 有几Node类,其中每个Node拥有NodeDataRef"参考"(认为shared_ptr)以"同一个实例Data"(类,结构,不管是谁-动态分配).
  2. 还有一个" Root"或"主"节点/类,它将RootDataRef引用(这次,思考weak_ptr)保存到相同的" Data".
  3. 当所有Nodes都被销毁时,data也会被破坏并RootDataRef设置为0/ NULL.即NodeDataRef行为shared_ptr<Data>RootDataRef行为一样weak_ptr<Data>
  4. 但是,即使仍有活动的NodeDataRefs,根节点也可以强制销毁数据.在这种情况下 …

c++ boost design-patterns smart-pointers qt4

5
推荐指数
1
解决办法
251
查看次数

Visual Studio C ++ 2013 Express中警告C4819-没有Bom的utf8文件

在Visual Studio C ++ 2013 Express中,似乎除非utf8编码的文件带有BOM标记,否则编译器无法理解所编译的文件采用UTF8编码,并将其视为本机编码。但是,代码编辑器没有此问题。

warning C4819: The file contains a character that cannot be represented in the current code page (932). Save the file in Unicode format to prevent data loss
Run Code Online (Sandbox Code Playgroud)

有解决此问题的方法吗?我记得在所有Visual Studio版本中这都是常见的问题,但是我不记得曾经见过修复程序。我不能一直给所有不是我的文件添加Bom标记,尤其是如果源代码保存在代码存储库中时。

c++ utf-8 visual-studio visual-studio-2013

5
推荐指数
1
解决办法
1742
查看次数

Unity 5:管理动态创建的GameObjects的简洁方法

在Unity 5中,管理动态创建的游戏对象的"干净"方式是什么?

我写了一个MonoBehavior创建/销毁几个的组件()GameObjects.对象作为自定义自定义系统的一部分加载,选择部分字符 - 头发/衣服等.这意味着它们对于播放器是可见的,在编辑器中可见,但不应该在编辑器中可编辑.正在加载的对象是带有骨架的网格.

脚本以这种方式运行:

  1. 从Resources中加载GameObjects(确切的对象在脚本中确定,它们不是预制件)
  2. 将它们附加到场景的某些部分(不一定是它自己的节点)
  3. 销毁时删除.

删除:

protected void unloadLastResource(){
    if (lastResourceInstance){
        if (Application.isEditor){
            GameObject.DestroyImmediate(lastResourceInstance);
        }
        else
            GameObject.Destroy(lastResourceInstance);
        Resources.UnloadUnusedAssets();
        lastResourceInstance = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

创建:

    GameObject target = getEffectiveTargetNode();
    Object resource = Resources.Load(newResourceName);
    instance = Instantiate(resource) as GameObject;

    instance.hideFlags = HideFlags.HideAndDontSave;
    instance.transform.parent = target.transform;
    instance.transform.localPosition = Vector3.zero;
    instance.transform.localRotation = Quaternion.identity;
    instance.transform.localScale = Vector3.one;
Run Code Online (Sandbox Code Playgroud)

销毁处理程序:

void OnDestroy(){
    unloadLastResource();
}
Run Code Online (Sandbox Code Playgroud)

这似乎在编辑器中工作正常,但是当我从游戏模式切换回edito模式时,我收到很多警告:

Destroying object multiple times. Don't use DestroyImmediate on the same object in OnDisable or …
Run Code Online (Sandbox Code Playgroud)

c# unity-game-engine unity3d-editor

5
推荐指数
1
解决办法
6242
查看次数

模板中的"const const T"

以下代码编译并适用于G ++ 4.4.0和MS VC2008 Express.

#include <iostream>

template<typename T> struct A{
protected:
    T v;
public:
    const T get() const{
        return v;
    }

    A(T v_)
    :v(v_){
    }
};

class B: public A<const int*>{
public:
    void doSomething() const{
        const int* tmp = get();
        std::cout << *tmp << std::endl;
    }

    B(const int* p)
    :A<const int*>(p){
    }
};

int main(int argc, char** argv){
    int a = 134;
    B b(&a);
    const B& c = b;
    b.doSomething();
    c.doSomething();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,据我所知,它的使用A<const int*>应该导致const …

c++ templates const

4
推荐指数
1
解决办法
1184
查看次数

Common Lisp:将多个值连接成向量

我需要一个将多个值连接到(简单)向量中的函数,类似于(concatenate )。但是,与串联不同,它应该能够处理不是向量或序列的参数。

即它应该像这样工作:

(concat #(1 2) 3) => #(1 2 3)
(concat 1 2 3) => #(1 2 3)
(concat 1 #(2 3 4)) => #(1 2 3 4)
(concat #(1 2) 2 #(3 4 5)) => #(1 2 3 4 5)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我想我忘记了一些琐碎的lisp构造,使之成为可能。

据我所知,串联无法做到。而且我不太确定如何将它与宏配合使用(有,@将列表插入最终的Lisp形式的构造,但是在这种情况下,我不确定如何区分非序列和序列)。

common-lisp

4
推荐指数
1
解决办法
586
查看次数

用于 C++ 应用程序的快速非对称密码

我正在寻找一种在 C++ 程序中使用的快速非对称密码算法。我们的应用程序访问存储在存档中的只读数据(自定义格式,有点类似于 tar),我想通过非对称加密存档索引来防止对该存档进行任何修改(我知道这不是一个完美的解决方案,并且仍然可以使用某些技术提取和重新打包数据)。

存档中的一些单个文件使用对称密码进行加密,并且它们的加密密钥存储在存档索引(标头)中。这就是为什么我想对存档头进行非对称加密。

Cypher 要求:
1)算法实现应该是平台无关的。
2) 算法应该易于自己实现,或者应该在允许与专有应用程序静态链接的库(带有源代码)中提供,这意味着不能使用 GPL/LGPL/病毒许可证。MIT/BSD 许可的代码或公共域代码是可接受的。
3)如果库中提供了 cypher,理想情况下它应该具有较小的内存占用,并且实现应该是紧凑的。我更愿意使用仅实现一种密码的 C/C++ 库,而不是成熟的通用密码集合。

本来我想使用RSA,但看起来它太慢了,没有什么用处,而且没有太多替代方案。

那么,对于我可以使用什么有什么建议吗?

c++ encryption encryption-asymmetric

3
推荐指数
1
解决办法
5887
查看次数

Qt 4.6.3中QGLWidget上的3D文本

我正在寻找一种在QGLWidget上绘制3D文本的简单方法,而不使用FTGL,FreeType,"渲染到纹理"或帧缓冲对象,即仅使用文档化的Qt 4函数,不需要额外的库.

想法?

PS"3D文字"意味着字母是平的并且厚度为零,但可以在3D空间中旋转.想想"星球大战开放爬行" - 位于3D空间的扁平字母.另外,我已经知道我可以编写我的文本渲染类,它将字形渲染到纹理等等.我正在寻找一种简单的方法来使用标准的Qt 4函数做同样的事情.例如,QPainter可能在内部访问所有必需的数据.

c++ opengl qt qt4

3
推荐指数
1
解决办法
3968
查看次数

在没有源代码的情况下调试/绕过BSOD

你好,祝你好运.

需要一点帮助:

情况:
我有一个模糊的DirectX 9应用程序(名称和应用程序的详细信息与问题无关),导致所有nvidia显卡(GeForce 8400GS及以上版本)的蓝屏死机,因为某些驱动程序版本.我认为问题是由DirectX 9调用或触发驱动程序错误的标志间接引起的.

目标:
我想通过编写代理dll来追踪违规的标记/函数调用(为了好玩,这不是我的工作/作业)并绕过错误条件.我已经有一个完成的代理dll,它为IDirect3D9,IDirect3DDevice9,IDirect3DVertexBuffer9和IDirect3DIndexBuffer9提供包装器,并提供Direct3D调用的基本日志记录/跟踪.但是,我无法确定导致崩溃的功能.

问题:

  1. 没有源代码或技术支持.没有任何帮助,没有其他人会解决问题.
  2. 内核产生的内存转储没有帮助 - 显然在nv4_disp.dll中发生了访问冲突,但是我不能使用stacktrace去IDirect3DDevice9方法调用,而且有可能异步发生错误.
  3. (主要问题)由于大量的Direct3D9Device方法调用,我无法将它们可靠地记录到文件或网络中:
    1. 即使没有刷新,登录到文件也会导致显着减速,因此系统BSOD会丢失日志的所有最后内容.
    2. 通过网络登录(使用UDP和WINSOck sendto)也会导致显着减速,并且不能异步完成(异步数据包在BSOD上丢失),即使同步发送,数据包(崩溃周围的数据包)有时也会丢失.
    3. 当应用程序通过记录例程"减慢"时,BSOD不太可能发生,这使得跟踪它更难.

问题:
我通常不会编写驱动程序,也不会进行这种级别的调试,所以我觉得我缺少一些重要的东西,比使用自定义日志记录机制编写IDirect3DDevice9代理dll有更简单的方法来追踪问题.它是什么?诊断/处理/修复问题的标准方法是什么(没有源代码,COM接口方法触发BSOD)?

Minidump分析(WinDBG):

Loading User Symbols
Loading unloaded module list
...........
Unable to load image nv4_disp.dll, Win32 error 0n2
*** WARNING: Unable to verify timestamp for nv4_disp.dll
*** ERROR: Module load completed but symbols could not be loaded for nv4_disp.dll
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

Use !analyze -v to get …

c++ windows debugging directx bsod

3
推荐指数
2
解决办法
1192
查看次数

C#:从枚举到类的自动转换

考虑这种情况.

  1. 有一个struct Color(由别人写)
  2. enum ColorCode一个实现html命名的颜色代码.
  3. 有一个转换ColorCode为的静态函数Color
  4. 我希望能够这样做:

    Color tmp = ....;
    tmp = ColorCode.Aqua;
    
    Run Code Online (Sandbox Code Playgroud)

如何在没有复制粘贴文本140次的情况下执行此操作?

ColorCode只要上面的行有效,我真的不在乎(枚举,类,等等).

问题:

C#不允许我为枚举定义运算符.我也没有任何宏来制作一些很好的人类可读表格ColorCode.

限制:

内容ColorCode应该是ints,但应该是可分配/可兑换的Color.


代码片段:

public enum ColorCode{
    AliceBlue = 0xF0F8FF,
    AntiqueWhite = 0xFAEBD7,
    Aqua = 0x00FFFF,
    Aquamarine = 0x7FFFD4,
    Azure = 0xF0FFFF,  ///Repeat 140 times
    ...
}

public static Color colorFromCode(ColorCode code){
 ....
}
Run Code Online (Sandbox Code Playgroud)

c# enums unity-game-engine

3
推荐指数
1
解决办法
176
查看次数

.com域名注册为127.0.0.1

有人注册了一些dot com域并指向127.0.0.1.像myserver.com这样的东西.

我在一个stackoverflow问题的答案中看到了这一点 - 但域的名称完全逃脱了我.谁能记得那个域名?

dns

0
推荐指数
1
解决办法
1149
查看次数