Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 强制函数中的静态常数在开始时进行求值?_C++_Function_C++11_Static_Operator Precedence - Fatal编程技术网

C++ 强制函数中的静态常数在开始时进行求值?

C++ 强制函数中的静态常数在开始时进行求值?,c++,function,c++11,static,operator-precedence,C++,Function,C++11,Static,Operator Precedence,考虑以下计划: 这意味着,marker,test()函数中的静态常数将在该函数的第一次调用期间进行求值。是否有一种方法或技巧(除非将marker声明为全局变量)强制在程序开始时对marker进行求值?否。函数中的静态值在第一次调用函数时进行求值。如果您需要更快地对其进行评估,则必须使其成为一个全球性的。另一种方法是在程序开始时调用函数,以便在实际需要函数之前对静态进行求值。您可以使用如下类来伪造函数: struct test_ { const std::chrono::high_reso

考虑以下计划:


这意味着,
marker
test()
函数中的静态常数将在该函数的第一次调用期间进行求值。是否有一种方法或技巧(除非将
marker
声明为全局变量)强制在程序开始时对
marker
进行求值?

否。函数中的静态值在第一次调用函数时进行求值。如果您需要更快地对其进行评估,则必须使其成为一个全球性的。另一种方法是在程序开始时调用函数,以便在实际需要函数之前对静态进行求值。

您可以使用如下类来伪造函数:

struct test_
{
    const std::chrono::high_resolution_clock::time_point marker; 

    test_()
      : marker( std::chrono::high_resolution_clock::now() )
    {}

    void operator()() const
    {
      std::cout<<marker.time_since_epoch().count()<<std::endl;
    }
} test;
struct测试_
{
常数标准::时钟::高分辨率时钟::时间点标记;
测试()
:标记器(标准::时钟::高分辨率时钟::现在()
{}
void运算符()()常量
{

std::为什么不能在开始时调用函数?您可以传递一个标志,这样函数就不会做任何其他事情。他可以使用该函数初始化一个未使用的全局函数,强制在main之前调用它。@MooingDuck:这似乎与仅从全局函数开始没有多大区别。
1363389335665993
--------
1363389335666701
--------
1363389335666701
struct test_
{
    const std::chrono::high_resolution_clock::time_point marker; 

    test_()
      : marker( std::chrono::high_resolution_clock::now() )
    {}

    void operator()() const
    {
      std::cout<<marker.time_since_epoch().count()<<std::endl;
    }
} test;