如何使用预处理器条件编译模板功能?像那样(但它不起作用):
template <bool var>
void f()
{
#if (var == true)
// ...
#endif
}
Run Code Online (Sandbox Code Playgroud) 例如,我们有一个类似的功能:
template <typename TYPE>
void construct_and_destruct(TYPE & object)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
我们不能像object.Type()和那样调用构造函数和析构函数object.~Type()(现在不正确)(为什么?= C)
要调用构造函数,我们可以喜欢new(&object) TYPE()。而且我不知道如何调用析构函数(不存在放置delete)。这该怎么做?
代码如何捕获异常(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细分市场?
我如何设置编译器生成相同的代码?对于例如:
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++ ×4
templates ×2
assembly ×1
constructor ×1
destructor ×1
disassembly ×1
exception ×1
inline ×1
visual-c++ ×1