大佬教程收集整理的这篇文章主要介绍了c – 为什么要访问一个类的私有变量,就像访问一个struct的变量一样有效?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
因为我听到很多次函数调用很昂贵,我在想,也许如果我使用结构体代表节点和树,这将使我的算法在实践中更有效率.
我创建了一个有一个私有变量,一个setter和一个getter的类.此外,我创建了一个也有一个变量的结构,没有setter / getter,因为我们可以通过调用struct.varName更新变量.结果如下:
运行次数就是我们称之为setter / getter的次数.以下是实验的代码:
#include <iostream> #include <fstream> #define BILLION 1000000000LL using namespace std; class foo{ private: int a; public: void set(int newA){ a = newA; } int get(){ return a; } }; struct bar{ int a; }; timespec startT,endT; void startTimer(){ clock_gettime(CLOCK_PROCESS_cpuTIME_ID,&startT); } double endTimer(){ clock_gettime(CLOCK_PROCESS_cpuTIME_ID,&endT); return endT.tv_sec * BILLION + endT.tv_nsec - (startT.tv_sec * BILLION + startT.tv_nsec); } int main() { int runs = 10000000; int startRun = 10000; int step = 10000; int iterations = 10; int res = 0; foo f; ofstream fout; fout.open("stats.txt",ios_base::out); fout<<"alg\truns\ttime"<<endl; cout<<"First experiment progress: "<<endl; int cnt = 0; for(int run = startRun; run <= runs; run += step){ double curTime = 0.0; for(int iter = 0; iter < iterations; iter++) { startTimer(); for (int i = 1; i <= run; i++) { f.set(i); res += f.get(); } curTime += endTimer()/iterations; cnt++; if(cnt%10 == 0) cout<<cnt/(((doublE)runs-startRun+1)/steP*iterations)*100<<"%\r"; } fout<<"class\t"<<run<<"\t"<<curTime/BILLION<<endl; } int res2 = 0; bar b; cout<<"Second experiment progress: "<<endl; cnt = 0; for(int run = startRun; run <= runs; run += step){ double curTime = 0.0; for(int iter = 0; iter < iterations; iter++) { startTimer(); for (int i = 1; i <= run; i++) { b.a = i; res2 += b.a; } curTime += endTimer()/iterations; cnt++; if(cnt%10 == 0) cout<<cnt/(((doublE)runs-startRun+1)/steP*iterations)*100<<"%\r"; } fout<<"struct\t"<<run<<"\t"<<curTime/BILLION<<endl; } fout.close(); cout<<res<<endl; cout<<res2<<endl; return 0; }
编辑:我没有-O3重新运行相同的实验
编辑:这是非常令人惊讶的,通过在一个单独的文件foo.h中声明类,在foo.cpp中实现getters / setters并运行-O3,似乎该类变得更加低效.
以上是大佬教程为你收集整理的c – 为什么要访问一个类的私有变量,就像访问一个struct的变量一样有效?全部内容,希望文章能够帮你解决c – 为什么要访问一个类的私有变量,就像访问一个struct的变量一样有效?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。