C++ 从成员初始化列表调用纯空函数?
我这里有个奇怪的问题。我用几个简单的计时器来测试对象的创建。我的代码库正在慢慢地从一个原型转变为一个完整的框架。这需要在main之外的顶层初始化一些简单的结构。这意味着我无法找到一种方法来对对象初始化进行基准测试,这是至关重要的 在一个理想的世界里,我可以做以下几点:C++ 从成员初始化列表调用纯空函数?,c++,initialization,initializer-list,object-initializers,C++,Initialization,Initializer List,Object Initializers,我这里有个奇怪的问题。我用几个简单的计时器来测试对象的创建。我的代码库正在慢慢地从一个原型转变为一个完整的框架。这需要在main之外的顶层初始化一些简单的结构。这意味着我无法找到一种方法来对对象初始化进行基准测试,这是至关重要的 在一个理想的世界里,我可以做以下几点: struct Potato { Potato() : benchmark::start() , some_int(42) { /* Some more stuffs
struct Potato {
Potato()
: benchmark::start()
, some_int(42)
{
/* Some more stuffs */
benchmark::stop();
}
int some_int;
};
你明白我的意思了,我希望对成员初始值设定列表进行基准测试。有人知道如何处理整个软件中全局静态的对象吗?我在试验constexpr函数,但没有用。当从一个简单函数返回对象集合时,我还从make_tuple得到一些复制构造函数问题
感谢您的提示。只需为您的基准创建一个包装结构,这样它的构造函数就只调用benchmark::start,然后您将在Patato的构造函数体中手动停止它。但是您需要确保包装器实例是Patato中的第一个对象,这将利用C++的成员初始化顺序。说明:
struct Benchmarker{
Benchmarker(){ benchmark::start(); }
};
struct Potato {
Potato()
: //Benchmark's ctor will be implicitly called first
some_int(42)
{
benchmark::stop();
}
Benchmarker benchmark; //NOTE: Make sure its the first
int some_int;
};
美好的谢谢。我也觉得这很有趣。我相信,两者的结合应该会起到一定的作用,通过某种定义来关闭这种行为。早安:私有继承在继承基准测试中也很有用。