我真的很对,C标准保证_ _ func _ _ value始终是封装函数的名称,而在C++中(当然,我的意思是C++ 11)它可以是任何实现定义的字符串(例如,如果我们有不带参数的函数foo,我们会得到类似“某些字符串fdgdg asdfs fsdf sd”)的信息吗?

ISO/IEC 9899:2011

6.4.2.2预定义标识符



ISO/IEC 14882:2011

8.4.1总的来说[dcl.fct.def.general]



那是什么原因呢?如果我们无法收到当前的函数名称,是否返回类似“未知”的信息?

最佳答案

C++中函数的“名称”是什么?

  • 是否通过其 namespace 限定?
  • 重载函数是否由其参数类型命名?
  • 返回类型(不用于重载)怎么样?
  • 函数模板中会发生什么?
  • 调用约定是名称的一部分吗?
  • 是否应在类型名称之前或之后写入“const”和“volatile”?

  • “实现定义的字符串”使编译器在将所有这些信息填充到字符串中时具有一定的灵活性。它会向您(程序员)发送一条消息,告知您不要尝试执行字符串比较或解析,或者如果您想携带可移植性,则实际上不做任何事情,但记录值。

    (您甚至无法将这些值相互比较,因为无法保证它们是唯一的。所有重载似乎都可能产生相同的字符串。因此不建议将其用于编译探查器统计信息。)

    09-06 11:15