- 论坛徽章:
- 0
|
回复 190# 三月廿七
那你的问题应该是重载决议了。我不管什么决议也好,还是重载也好,你只要搞懂了名字修饰这个东西,其他都是浮云。名字修饰就是编译器给你在背后干的事情,所以你看不清楚,你试试编译一个dll出来,然后dump一下他的导出函数,看看就有名字修饰,比如
void func()差不多就该叫@@func@这种,void func(int)就该是@@func@int,而void func(int, long)就该是@@func@int@long这种。你调用的时候自然就可以找到响应的函数。而模版加进来就等于把这个问题扩大了而已,各种已经定义的函数都不匹配就匹配到模版去了。重载决议还有个决议就是子类继承父类后覆盖父类方法的决议,所以名字修饰还应该加入类型信息。总之是各种编译器给你做的。你看看c++ prime吧,里面好像有重载决议这个详细讲解。还有,书上说返回类型不能加入重载决议,但是可以用一些语法唐让返回值也加入重载决议,只是有些猥琐而已。
这些还不算复杂,还可以加进来模版的特化,半特化等等,以及c++11要支持的各种特性,这才麻烦,其实这些也不算麻烦,更麻烦的还有各种编译器对标准的支持程度不同,甚至相同标准之间的支持差异,都是很蛋疼的,每一样都要命。 |
|