C++11__func__预定义标识符

C++11__func__预定义标识符
【1】__func__预定义标识符
很多现代的编译器都⽀持C99标准中的__func__预定义标识符功能,其基本功能就是返回所在函数的名字。
常见的⽤法,看下⾯这个例⼦:
#include <iostream>
using namespace std;
const char* hello() { return __func__; }
const char* world() { return __func__; }
int main()
艾滋病实名制{
cout << hello() << ", " << world() << endl; // hello, world
青岛理工大学学报}
上例中,定义了两个函数hello和world。利⽤__func__预定义标识符,我们返回了函数的名字,并将其打印出来。
事实上,按照标准定义,编译器会隐式地在函数的定义之后定义__func__标识符。灯光王愿坚
⽐如上述例⼦中的hello函数,其实际的定义等同于如下代码:
const char* hello()
{
static const char* __func__ = "hello";
return __func__;
}
【2】C++11中的区别
在C++11中,标准甚⾄允许其使⽤在类或者结构体中。可以看看下⾯这个例⼦:
#include <iostream>
using namespace std;
struct TestStruct
{
TestStruct() : name(__func__)
{}
const char* func()
{
return __func__;
}
// void funcFail(string func_name = __func__); // E1036 保留的标识符 "__func__" 只能在函数内部使⽤
const char* name;
};
int main()
{
TestStruct ts;
cout << ts.name << endl;  // TestStruct
cout << ts.func() << endl; // func
}
从代码中可以看到,在结构体的构造函数中,初始化成员列表使⽤__func__预定义标识符是可⾏的,其效果跟在函数中使⽤⼀样。不过将__fun__标识符作为函数参数的默认值是不允许的,如上例函数funcFail所⽰(⽆法编译通过)
刘震云百度百科这是由于在参数声明时,__func__还未被定义。流体中文网
kones
Good Good Study, Day Day Up.
顺序选择循环总结

本文发布于:2024-09-22 19:30:12,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/476363.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:定义   标识符   函数   返回
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议