草庐IT

c++ - C++ 代码的符号表是否包含函数名和类名?

我一直在搜索有关C++代码的符号表是否包含函数名称和类名称的各种帖子。我可以在帖子上找到的东西是它取决于编译器的类型,如果它一次性编译代码,则不需要在符号表中存储类名和子例程名但是如果它是一个多channel编译器,它可以添加有关它遇到的类及其子例程的信息,以便它可以进行参数类型检查并发出有意义的错误消息。我不明白它是否真的依赖于编译器?我假设编译器(对于C++代码)会将函数名和类名放在表中,无论是单程还是多程编译器。它如何依赖于通行证?我没有如此丰富/深入的知识。此外,任何人都可以显示一个简单的C++类的示例符号表,它会是什么样子(带有类名的函数名)? 最

c++ - 变量名与函数名相同,给出编译器错误...为什么?

今天遇到一个有趣的问题,我想了解原因。考虑以下几点:classBase{public:Base(){}~Base(){}staticvoidfunction1(){}voidfunction2(){intfunction1;function1=0;function1();//我收到以下错误:expressionprecedingparenthesesofapparentcallmusthave(pointer-to-)functiontype我想我明白为什么会出现此错误:function1在function2()之外被自己调用时,实际上是指向function1()的函数指针。在func

c++ - 为什么打印一个函数名会返回一个值?

我不小心打印了一个没有括号的函数名,它打印了一个值。我只是好奇这是怎么发生的?无论函数名称或定义如何,每次运行时输出都是相同的。编辑:对于正在阅读本文的任何其他人,答案消除了我的疑问-将函数名显式转换为int是可行的,即intk=(int)foo;这段测试代码会让事情变得更清楚:#include#include#includeusingnamespacestd;voidfoo(){cout 最佳答案 不带括号的函数名被解释为函数指针。该指针被%u格式说明符解释为unsignedint,这是未定义的行为,但恰好适用于大多数系统。int

c++ - C++中的函数名冲突

B类继承自A类。A类有一个名为bind的虚函数。.ClassA{virtualvoidbind();}classB:publicA{B();}在B的构造函数中,它使用bind(int__fd,__CONST_SOCKADDR_ARG__addr,socklen_t__len)来自的函数.#includeB::B(){intsockfd=socket(AF_INET,SOCK_STREAM,0);sockaddr_inserver_addr,client_addr;if(sockfd编译器抛出错误说两个bind功能冲突。我知道我可以为bind创建一个包装器在sys/socket.h.有没

c++ - 将函数名称作为参数传递给函数

是否可以将一个函数的名称(比如A)作为参数传递给另一个函数(比如B),然后从函数B调用函数A。也就是说,函数名将存储在B中的一个变量中,并使用它调用名称在变量中的函数。例如,在C++排序函数中,第一个和第二个参数是迭代器,但第三个参数是函数的名称。 最佳答案 你可以为“任何可以用两个参数调用的东西”引入一个模板参数(这里是Pred):templatevoidmysort(Iterbegin,Iterend,Predpredicate){--end;//...if(predicate(*begin,*end)){//...}//...

c++ - 在 C++ 中的函数名前使用 '&' 运算符

引用定义对象的替代名称。引用类型“指的是”另一种。我们通过编写&d形式的声明符来定义引用类型,其中d是声明的名称。接下来是引用不是对象。相反,引用只是已存在对象的另一个名称。所以我们将使用这些引用通过引用传递参数,以便它直接影响实际参数。问题:当我们在函数名称​​之前使用引用(&)时会发生什么?我有点困惑,因为在我看来它会返回return的别名(变量名)。还是我错了?std::vector&split(conststd::string&s,chardelim,std::vector&elems){std::stringstreamss(s);std::stringitem;while(

c++ - 如何在 Visual Studio 的匿名命名空间内通过函数名设置断点?

我有以下代码:namespace{voidFoo(){}}namespaceBar{voidFoo(){}}intmain(){Foo();Bar::Foo();return0;}我想按名称(Ctrl+B键绑定(bind))在匿名命名空间内的Foo()上放置断点。我可以在命名空间Bar中为函数执行此操作,按名称Bar::Foo没有问题。我为匿名命名空间尝试了anonymousnamespace::Foo但VS无法解析此名称,我猜是因为名称中的空白字符。我也试着加上不同的引号,但没有成功。是否可以放置此断点? 最佳答案 我很久以前遇到

c++ - if 语句中的函数名以一种奇怪的方式转换

使用此代码(有效的C++11):#include#includeboolmy_awesome_func(intparam){return(param>1);}intmain(intargc,charconst*argv[]){fprintf(stderr,"typeofmy_awesome_func:%s\n",typeid(my_awesome_func).name());if(my_awesome_func){fprintf(stderr,"WHAT???\n");}return0;}问题在if语句中。虽然typeid返回一些看起来像FbiE的东西(我认为这是函数类型的gcc语言)

c++ - 为什么 Windows 和 Linux 的标准库函数名称不同?

我正在将一个Windows库移植到Android(使用GNU标准C++库选项,libstdc++-v3),VC和GNU库之间似乎存在许多命名差异,例如:_stricmp被称为strcasecmp而不是_unlink被称为unlink_scalb称为scalbn_finite被称为isfinite_isnan被称为isnan_itoa和itoa在GNUC++中似乎不存在atoi确实存在,但atoi64不存在VC和GNU库的文档暗示它们实现了“ISO”C++,例如,我可以从VC2008中得到一些关于不使用“ISOC++”名称的警告,例如这个:“警告C4996:'itoa':此项的POSIX

php - 在函数中传递一个函数名作为参数

我有这样的功能:functiontest($str,$func){$func($str);//Somethingmorehere}我怎样才能在那里传递一个函数名?我想做test("Hello",strtolower);或test("Bye",sometextprocessfunc); 最佳答案 functiontest($str,$func){returncall_user_func($func,$str);}像这样使用它$asd=test("ASD","strtolower"); 关于