首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >std::is_same对代码的性能有影响吗?

std::is_same对代码的性能有影响吗?
EN

Stack Overflow用户
提问于 2020-07-22 19:17:11
回答 1查看 407关注 0票数 3

is_same对代码性能有任何影响吗?我在代码中多次使用它来检查是否必须使用std::lessstd::greater,并根据它们检索特定的值。在我的情况下,我的测试是否足以证明std::is_same并不真正影响代码的性能?

代码要复杂得多,我不得不使用模板。我尽量模仿使用is_same的地方。

我编译并运行了带有-O3编译器选项的代码。

代码语言:javascript
运行
复制
#include <iostream>
#include <vector>
#include <chrono> 

using namespace std::chrono; 
using namespace std;

template<typename T>
int returnVal(T compare) {
    std::vector<int> v = {1,2,3,4};
    if(std::is_same<T,std::greater<int>>::value) {
        return std::min(v[0], v[1], compare);
    } else {
        return std::min(v[2], v[3], compare);
    }
}

int returnValNoTemplate(bool b) {
    std::vector<int> v = {1,2,3,4};
    if(b == true) {
        return std::min(v[0], v[1]);
    } else {
        return std::min(v[2], v[3]);
    }
}


int main()
{   
    
    for(int i = 0; i < 10; i++) {
      auto start = high_resolution_clock::now(); 
      for(int i  = 0; i < 100000;++i) {
        int x = returnVal(std::greater<int>());
      }
    
      auto stop = high_resolution_clock::now();
      auto duration = duration_cast<microseconds>(stop - start); 
      cout <<"is_same duration:" <<  duration.count() << "\n" << endl; 
    
      auto start1 = high_resolution_clock::now(); 
      for(int i  = 0; i < 100000;++i) {
       int y = returnValNoTemplate(true);
      }
      auto stop1 = high_resolution_clock::now();
      auto duration1 = duration_cast<microseconds>(stop1 - start1); 
      cout <<"No template duration:" <<  duration1.count() << "\n" << endl; 
    }

    return 0;
}

R1: is_same工期:4052无模板持续时间:4041

R2: is_same工期:3954无模板持续时间:3950

R3: is_same工期:3963无模板持续时间:3973

R4: is_same工期:4008无模板持续时间:4048

R5: is_same工期:3948无模板持续时间:3998

R6: is_same工期:4130无模板持续时间:4036

R7: is_same工期:3932无模板持续时间:3948

R8: is_same工期:4183无模板持续时间:4088

R9: is_same工期:4731无模板持续时间:5062

R10: is_same工期:4018无模板持续时间:4887

#摇摆式tests#

R1:无模板持续时间:5729 is_same持续时间:5474

R2:无模板持续时间:3988 is_same持续时间:4039

R3:无模板持续时间:3996 is_same持续时间:4114

R4:无模板持续时间:4063 is_same持续时间:4068

R5:无模板持续时间:3979 is_same持续时间:4096

R6:无模板持续时间:4159 is_same持续时间:4020

R7:无模板持续时间:3990 is_same持续时间:4086

R8:无模板持续时间:4001 is_same持续时间:4055

R9:无模板持续时间:4048 is_same持续时间:4088

**R10:**无模板持续时间:4070 is_same持续时间:4017

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 19:39:16

std:is_same是一个编译时检查,它是用两个不同的模板脚印实现的。一个有一个类型,一个有两个类型。

代码语言:javascript
运行
复制
std::is_same<T, T> //If the compiler resolves to this it is the same type;
std::is_same<T, U> //If the compiler resolves to this it is 2 types;

实现返回一个类型,然后将其转换为bool,该类型将解析为true或false,生成代码要遵循的一条路径。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63041628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档