Boilerplate函数名称

时间:2014-04-25 16:37:11

标签: c++ c++11

在我参与过的项目中,大多数都有样板代码,用于为函数名创建局部变量。什么是最快/最好的方式?或者,有更快/更好的方法吗?我们确信这些功能会经常被调用,而且它是一个性能关键的项目。那么,初始化函数名称的最佳方法是什么?

有些人见过:

/*1*/  const static std::string functionName("function1");
/*2*/  const static std::string functionName( __PRETTY_FUNCTION__ );
/*3*/  const std::string functionName("function1");
/*4*/  const char functionName [] = "function1";  

编辑:我认为这很明显,但我们使用这种声明的原因是我们可以使用functionName变量打印出函数中的调试信息。也许它不明显的原因是因为我们没有很好地实施它。我很想知道其他实现方法。

2 个答案:

答案 0 :(得分:4)

C ++ 11 8.4.1 / 8:

  

函数本地预定义变量__func__被定义为表单的定义

static const char __func__[] = "function-name";
     已提供

,其中 function-name 是实现定义的字符串。未指定此变量的地址是否与程序中任何其他对象的地址不同。

     

[例如:

  struct S {
    S() : s(__func__) { } // OK
    const char *s;
  };

  void f(const char * s = __func__); // error: __func__ is undeclared
     

-end example]

答案 1 :(得分:2)

初始化函数名称指针没有时间,因为如果只使用指向函数名的指针(编译时间常量),这将在编译/链接时完成。

void foo()
{
    static const char* myname =  __PRETTY_FUNCTION__ ;

}