小编ura*_*ray的帖子

未定义的C/C++符号作为运算符

我注意到字符/符号'''和'@'在C/C++中不用作运算符,

  1. 有谁知道原因或历史原因为何如此?
  2. 如果它真的没用过,使用#define将这些符号定义为另一个运算符/语句是否安全?

c c++ syntax symbols operators

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

C++ Win32 Unhandled Exception Handler

目前我使用SetUnhandledExceptionFilter()来提供回调以在发生未处理的异常时获取信息,该回调将为我提供提供的EXCEPTION_RECORDExceptionAddress.

[1]究竟是什么ExceptionAddress?它是提供异常的函数/代码的地址,还是某些函数试图访问的内存地址?

[2]有没有更好的机制可以在未处理的异常发生时给我更好的信息?(我不能使用调试模式或添加任何影响运行时性能的代码,因为崩溃很少见,只有在代码运行得尽可能快的时才发布版本)

[3]有什么办法让我在未处理的异常发生时得到几个callstack地址.

[4]假设ExceptionAddress具有地址A,我已经DLL X加载并在基地址执行A-x,以及其它一些DLL的Y A+y,是好假设碰撞被PROBABLY由DLL X代码引起的?

c++ crash dll exception callback

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

C++部分模板特化语法

对于主要模板:

template<typename A, typename B> class MyClass {...
Run Code Online (Sandbox Code Playgroud)

与模板专业化,有什么区别

template<typename A, typename B> class MyClass<int, float> {...
Run Code Online (Sandbox Code Playgroud)

template<> class MyClass<int, float> {...
Run Code Online (Sandbox Code Playgroud)

c++ templates metaprogramming partial-specialization specialization

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

模板循环继承

在这段代码中,编译器抱怨undefined MyClassB,这是可以理解的:

class MyClassA;
class MyClassB;

template <class T> class BaseClass : public T {
};

class MyClassA : public BaseClass<MyClassB> {
};

class MyClassB : public BaseClass<MyClassA> {
};
Run Code Online (Sandbox Code Playgroud)

但在这段代码,编译是成功的,并没有抱怨有关MyClassB:

class MyClassA;
class MyClassB;

template <class T> class BaseClass : public T {
};

class MyClassA : public BaseClass<std::vector<MyClassB>> {
};

class MyClassB : public BaseClass<std::vector<MyClassA>> {
};
Run Code Online (Sandbox Code Playgroud)

为什么第二个代码编译,因为MyClassB在构造时尚未定义std::vector<MyClassB>

c++ inheritance templates circular-dependency incomplete-type

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

是否有任何更快的解析方法比走每个字节?

是否有任何更快的方法来解析文本而不是通过遍历文本的每个字节?

我想知道是否有任何特殊的CPU(x86/x64)指令用于字符串库使用的字符串操作,它以某种方式用于优化解析例程.

例如,在字符串中查找可由硬件运行的令牌而不是循环每个字节直到找到令牌的指令.

*编辑 - >注意:我更多地要求算法而不是CPU架构,所以我真正的问题是,是否有任何特殊的算法或特定的技术可以优化字符串操作例程给定当前的cpu架构.

c++ string cpu optimization parsing

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

安全放置新的和显式的析构函数调用

这是我的代码示例:

template <typename T> struct MyStruct {
    T object;
}

template <typename T> class MyClass {
    MyStruct<T>* structPool;
    size_t structCount;

    MyClass(size_t count) {
        this->structCount = count;
        this->structPool  = new MyStruct<T>[count];
        for( size_t i=0 ; i<count ; i++ ) {
            //placement new to call constructor
            new (&this->structPool[i].object) T(); 
        }
    }

    ~MyClass() {
        for( size_t i=0 ; i<this->structCount ; i++ ) {
            //explicit destructor call
            this->structPool[i].object.~T(); 
        }
        delete[] this->structPool;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,这是一种安全的方法吗?在某种情况下我会犯一些隐藏的错误吗?它适用于每种类型的物体(POD和非POD)吗?

c++ constructor destructor placement-new

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

SethreadAffinityMask()正确用法?

我有1500个线程..我希望它们在12个处理器上运行...为此我打电话 SetThreadAffinityMask(GetCurrentThread(),1<<(threadnum%numprocessors)); 其中numprocessors = 12.这是正确使用面具吗?它需要是可扩展的,即如果我希望它只在11个处理器上运行,那么 SetThreadAffinityMask(GetCurrentThread(),1<<(threadnum%numprocessors));numprocessors = 11.

c++ multithreading affinity setthreadaffinitymask

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