小编4By*_*tes的帖子

预处理程序和模板参数或代码段的条件编译

如何使用预处理器条件编译模板功能?像那样(但它不起作用):

template <bool var>
void f()
{
    #if (var == true)
    // ...
    #endif
}
Run Code Online (Sandbox Code Playgroud)

c++ templates c-preprocessor

5
推荐指数
2
解决办法
2294
查看次数

如何在模板中调用类型的析构函数?

例如,我们有一个类似的功能:

template <typename TYPE>
void construct_and_destruct(TYPE & object)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

我们不能object.Type()和那样调用构造函数和析构函数object.~Type()(现在不正确)(为什么?= C

要调用构造函数,我们可以喜欢new(&object) TYPE()。而且我不知道如何调用析构函数(不存在放置delete)。这该怎么做?

c++ templates constructor destructor template-function

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

代码如何捕获异常?

代码如何捕获异常(try,catch(...))?

push 0FFFFFFFFh
...
mov eax, dword ptr fs:[00000000h]
...
mov dword ptr fs:[00000000h],eax  
mov dword ptr [ebp-10h],esp
Run Code Online (Sandbox Code Playgroud)

这个代码在函数的"头部"中意味着什么,它捕获异常?

mov dword ptr [ebp-4], 0
Run Code Online (Sandbox Code Playgroud)

而这(在"尝试"的头部)?函数没有任何局部变量.

功能:

int SUM(int a, int b)
{
    try{}
    catch(...){}
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

什么存储在FS细分市场?

c++ assembly exception-handling exception visual-studio

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

内联或相同的代码

我如何设置编译器生成相同的代码?对于例如:

inline bool iszero(int a)
{
    return (a == 0);
}

int main()
{
    int a = 4;

    if(a == 0) // First
        a = 5;

    if(iszero(a)) // Second
        a = 5;

    ///...
}
Run Code Online (Sandbox Code Playgroud)

在调试模式(带内联)中,反汇编代码如下所示:

if(a == 0) // First
     a = 5;

bool temp; // Second
if(a == 0)
    temp = 0;
else
    temp = 1;

if(temp == 0)
    a = 5;
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

为什么要问这个问题?我需要使用内联函数调试我的应用程序(用于加速调试),我不想在调试模式下失去性能.

c++ inline disassembly visual-studio visual-c++

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