C++ 从成员初始化列表调用纯空函数?

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

我这里有个奇怪的问题。我用几个简单的计时器来测试对象的创建。我的代码库正在慢慢地从一个原型转变为一个完整的框架。这需要在main之外的顶层初始化一些简单的结构。这意味着我无法找到一种方法来对对象初始化进行基准测试,这是至关重要的

在一个理想的世界里,我可以做以下几点:

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;
};

美好的谢谢。我也觉得这很有趣。我相信,两者的结合应该会起到一定的作用,通过某种定义来关闭这种行为。早安:私有继承在继承基准测试中也很有用。