我一直在研究由其他人(离开公司)开始的C++项目.他编写了一段代码似乎工作得很好,但我无法理解.
以下是代码的简化版本:
有两个类:
class Algo_t {
protected :
Matrix_t m_Matrix ;
public:
Algo_t(Matrix_t && Matrix) {
DoSomething();
}
};
class Matrix_t {
protected :
std::ifstream & m_iftsream ;
public:
Matrix_t(std::ifstream && ifstream) {
DoSomething();
}
};
Run Code Online (Sandbox Code Playgroud)
主要:
主函数中有以下调用:
char * pMyFileName = agrv[1] ;
Algo_t MyAlgo(ifstream(pMyFileName));
Run Code Online (Sandbox Code Playgroud)
首先,我觉得很奇怪,因为不存在构造函数的代码编译没有任何错误Algo_t采取ifstream作为一个参数.我更惊讶地发现这段代码运行得很好.
构造函数是由编译器生成的还是由C++ 11引入的一些新特性(带有rvalue ...)?
我有一个关于std :: vector实例化的问题.我比较了std :: vector的实例化和相同大小的数组的动态分配.我期待std :: vector的实例化会花费更长的时间但我的性能差异很大.
对于数组我有53 us对于std :: vector我有4338 us
我的代码:
#include <chrono>
#include <vector>
#include <iostream>
int main() {
unsigned int NbItem = 1000000 ;
std::chrono::time_point<std::chrono::system_clock> start, middle ,end;
start = std::chrono::system_clock::now() ;
float * aMallocArea = (float *)calloc(sizeof(float)*NbItem,0) ;
middle = std::chrono::system_clock::now() ;
std::vector<float> aNewArea ;
middle = std::chrono::system_clock::now() ;
aNewArea.resize(NbItem) ;
//float * aMallocArea2 = new float[NbItem];
end = std::chrono::system_clock::now() ;
std::chrono::duration<double> elapsed_middle = middle-start;
std::chrono::duration<double> elapsed_end = end-middle;
std::cout << "ElapsedTime CPU = " …Run Code Online (Sandbox Code Playgroud)