在我参与过的项目中,大多数都有样板代码,用于为函数名创建局部变量。什么是最快/最好的方式?或者,有更快/更好的方法吗?我们确信这些功能会经常被调用,而且它是一个性能关键的项目。那么,初始化函数名称的最佳方法是什么?
有些人见过:
/*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变量打印出函数中的调试信息。也许它不明显的原因是因为我们没有很好地实施它。我很想知道其他实现方法。
答案 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__ ;
}