小编jam*_*o00的帖子

C++:安全使用longjmp和setjmp?

关于以下内容在linux/gcc上使用C++中的longjmp和setjmp是否安全?

  1. 异常处理(我没有使用longjmp/setjmp实现异常处理.我想知道longjmp/setjmp对标准异常处理会产生什么副作用)
  2. *this 指针
  3. 信号
  4. 智能指针(boost的共享和侵入指针)
  5. 你能想到的任何其他东西.

c++ linux gcc exception longjmp

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

枚举C++中的枚举

在C++中,是否可以枚举枚举(运行时或编译时(首选))并为每次迭代调用函数/生成代码?

示例用例:

enum abc
{    
    start
    a,
    b,
    c,
    end
}    
for each (__enum__member__ in abc)
{    
    function_call(__enum__member__);    
}
Run Code Online (Sandbox Code Playgroud)

合理的重复:

c++ enums enumeration metaprogramming

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

优化阵列压缩

假设我有一个数组 k = [1 2 0 0 5 4 0]

我可以按如下方式计算掩码 m = k > 0 = [1 1 0 0 1 1 0]

仅使用掩码m和以下操作

  1. 向左/向右移动
  2. 和/或
  3. 加/减/乘

我可以将k压缩成以下内容 [1 2 5 4]

这是我目前的做法(MATLAB伪代码):

function out = compact( in )
    d = in
    for i = 1:size(in, 2) %do (# of items in in) passes
        m = d > 0
        %shift left, pad w/ 0 on right
        ml = [m(2:end) 0] % shift
        dl = [d(2:end) 0] % shift

        %if …
Run Code Online (Sandbox Code Playgroud)

algorithm matlab sse simd

22
推荐指数
2
解决办法
2936
查看次数

C++模板功能专用:"非法使用显式模板参数"

以下模板专业化代码:

template<typename T1, typename T2>
void spec1()
{

}
Run Code Online (Sandbox Code Playgroud)

测试案例1:

template< typename T1> //compile error
void spec1<int>()
{

}
Run Code Online (Sandbox Code Playgroud)

测试案例2:

template< typename T2> //compile error
void spec1<int>()
{

}
Run Code Online (Sandbox Code Playgroud)

生成以下编译错误:

错误C2768:'spec1':非法使用显式模板参数

有谁知道为什么?

c++ templates typename template-specialization

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

没有虚函数的C++继承的开销

在C++中,与继承没有虚函数的基类相关的开销(内存/ CPU)是什么?它是否像集体成员的直接复制+粘贴一样好?

class a
{
public:
    void get();
protected:
    int _px;
}

class b : public a
{

}
Run Code Online (Sandbox Code Playgroud)

和....相比

class a
{
public:
    void get();
protected:
    int _px;
}

class b
{
public:
    void get();
protected:
    int _px;

}
Run Code Online (Sandbox Code Playgroud)

c++ virtual inheritance overhead

19
推荐指数
2
解决办法
9276
查看次数

在Visual Studio中使用在Linux/MinGW中编译的libs/dll

更新:编译时收到此警告:找到具有不同属性的多个".text"部分

嗨,

我使用MinGW Cross Compiler在Linux中编译了一些库(.a和.dll).我可以在Visual Studio 2008中成功链接它们(.a).但是,当它运行时(使用.dll),它会终止,地址指针指向空的内存地址.

有没有办法/列表可以让我在VC08中成功使用这些库?

交叉编译器生成

  1. *.dll.a
  2. *.DLL

谢谢

c++ gcc mingw cross-compiling visual-c++

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

Visual C++预编译标头错误

更新:

在我的头文件中包含stdafx.h有什么影响?


我开始使用Linux/Eclipse CDT中的C++项目并将其导入Visual C++/Windows.

在Visual C++中,我开始使用预编译头来加速编译,并定义了stdafx.cpp和stdafx.h.

这是我的stdafx.h

#pragma once

#include <string>
#include <vector>
#include <map>
...
Run Code Online (Sandbox Code Playgroud)

和我的stdafx.cpp

#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)

在每个.h和.cpp文件中,我有以下内容:

#pragma once //if in a header file
#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)

对于发布和调试,我都有"创建预编译头(/ Yc)".它在调试模式下编译良好,但在发布模式下它保持报告

error LNK2005: ___@@_PchSym_@00@UfhvihUaszlaDUwlxfnvmghUnnlUhixUnnlPeDUnnlPeDUivovzhvUvmgrgbOlyq@ already defined in A.obj
Run Code Online (Sandbox Code Playgroud)

如果我同时切换到"使用预编译头",我会进入Debug和Release

fatal error C1854: cannot overwrite information formed during creation of the precompiled header in object file:
Run Code Online (Sandbox Code Playgroud)

有谁知道发生了什么?

c++ header precompiled-headers visual-studio visual-c++

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

Moq验证事件已触发

class A
{
    event EventHandler Event1;
}
var mock = new Mock<A>();
Run Code Online (Sandbox Code Playgroud)

如何验证Event1被解雇?(不使用手动事件处理程序/触发标志)

c# moq

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

C#Reflection - 派生类型中的基类静态字段

在C#中,当我反映派生类型时,为什么我看不到基类的静态字段?

我都试过type.GetFields(BindingFlags.Static)type.GetFields().

c# reflection inheritance static field

13
推荐指数
3
解决办法
4242
查看次数

在C/C++中引用Lua函数

我有一个函数嵌套在一组表中相对较深.有没有一种方法可以在C/C++中获取该函数的"引用",并在需要使用它时将其(和args)推送到堆栈中?

c c++ lua function-pointers function

13
推荐指数
1
解决办法
5366
查看次数