C++ 为什么试块会降低我程序的速度?

C++ 为什么试块会降低我程序的速度?,c++,exception,C++,Exception,我一直在研究\uu try/\uu除了构造是否足够快,是否适合我使用,并遇到了一个奇怪的结果 我惊讶地发现,在\uuu-try块中调用函数的速度是单独调用函数的两倍 为什么会这样 #包括 使用名称空间std; //附加statndart包括 #包括 空函数() { int a=0; 对于(int i=0;i当你问问题时,你的意思可能是你想使用\uuuu try/\uu,除了而不是try/catch \u try/\u是否比try/catch快或慢并不重要,因为, \uuuuu try/\uu除

我一直在研究
\uu try
/
\uu除了
构造是否足够快,是否适合我使用,并遇到了一个奇怪的结果

我惊讶地发现,在
\uuu-try
块中调用函数的速度是单独调用函数的两倍

为什么会这样


#包括
使用名称空间std;
//附加statndart包括
#包括
空函数()
{
int a=0;

对于(int i=0;i当你问问题时,你的意思可能是你想使用
\uuuu try
/
\uu,除了
而不是
try
/
catch

\u try
/
\u是否比
try
/
catch
快或慢并不重要,因为,
\uuuuu try
/
\uu除外
用于捕获而不是捕获一般异常

对于标准C++代码,你应该总是使用<代码>尝试<代码> >代码> catch <代码>,而不是<代码>尝试< <代码> >代码> >除


<>代码>尝试< C++ >代码> catch <代码>,是C++标准处理一般C++异常的标准。

您没有给出编译器版本、优化设置,并且使用了各种优化机会的代码。然后您只运行一次函数。不管怎么说,选择计时代码还不够精确。即使我们承认你的代码是一个可靠的基准(不是),我也没有得到任何统计上的显著差异,所以这个问题是没有意义的。4次没有uu try()3510351635683419和uu-try 1782179217391732的问题似乎更复杂。在调试版本中的VS2010上,无论使用哪种定义,每次运行的时间都约为3200ms。在发布版本中,非uu-try版本的时间变为2400ms,而u-try版本的时间变为1200ms。顺便说一句:我将时间改为QueryPerformanceCounter因为它更可靠。OP的框架非常糟糕,但是如果Feruzbek和mkaes列出的时间是准确的,那么这里有一个真正的问题。
 #include <iostream>


 using namespace std;

 //addiitonal statndart includes
 #include <windows.h>

 void function()
 {
    int a=0;
        for (int i=0;i<1000;i++)
            for(int j=0;j<1000000;j++)
            {
                if(0==i*j % 2)
                    a++;
                else
                    a--;
            }
cout << a<< endl;
 }
 //you can make 0 for test wihtout try
 #define USE_TRY 1

 int main()
 {

DWORD time = 0;
time =timeGetTime();

#if USE_TRY
    __try{
        function();
    }
    __except(1)
    {
        cout <<"   exception handled"<< endl;
    }
#else
    function();
#endif

time =timeGetTime()-time;

cout<<"time = "<<time<<endl;

 }