灌南二中姜飞是体育特长生招生方案吗?听说他那时候体育很牛B

灌南二中姜飞是体育特长生吗?听说他那时候体育_灌南二中吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,352贴子:
灌南二中姜飞是体育特长生吗?听说他那时候体育
灌南二中姜飞是体育特长生吗?听说他那时候体育很牛B
我是高二狗,就是想问问...
(你们在哪里)
有吗?报名啊?六点半.....
不能惹体育队人啊 ,班...
明天就是体考了,愿你们...
RT 我是校队的大前锋 今...
  ?﹏﹏﹏﹏﹏﹏﹏﹏...
你谁拿两个小号来秀下限的么
拐弯抹角夸这人一下
100米10秒6路过
内&&容:使用签名档&&
保存至快速回贴
为兴趣而生,贴吧更懂你。&或把extern double warning拿到update外面就好了。声明放函数里面只在大括号内是可见的。
把extern double warning拿到update外面就好了。声明放函数里面只在大括号内是可见的。
随便写几个思考题:&br&&br&&br&如何将lambda存到new出来的内存&br&如何实例化指数级个template&int&&br&如何用字符串做模版参数&br&如何将一个对象就地变换成另一个类的对象&br&如何检测某个类是否有某个名字的成员&br&如何实现template virtual成员函数&br&如何实现动态multi dispatch&br&如何宕掉主流C++编译器&br&……
随便写几个思考题:如何将lambda存到new出来的内存如何实例化指数级个template&int&如何用字符串做模版参数如何将一个对象就地变换成另一个类的对象如何检测某个类是否有某个名字的成员如何实现template virtual成员函数如何实现动态multi dispatch如何宕掉…
读C++ PRIMER,然后敲代码,把示例和习题都敲一遍。&br&&br&我也是零基础,当时初学就是这样干的,可以给自己定个计划例如一天消化一章或者多少页什么的。然后花了大约21天,每天从8点到22点,不敢说精通,但至少入门了。
读C++ PRIMER,然后敲代码,把示例和习题都敲一遍。我也是零基础,当时初学就是这样干的,可以给自己定个计划例如一天消化一章或者多少页什么的。然后花了大约21天,每天从8点到22点,不敢说精通,但至少入门了。
&p&计算机科学与技术,一部分人是当成科学来研究的,一部分是当成技术来用的;程序员基本属于后者;但这里面有一部分以为看了几遍前者的论文,就非常了不起了,高高的站在鄙视链顶端乱喷。&/p&&br&=======&br&本来就是不擅长写这么多字的程序员,下面的话又是开了嘲讽技以后写的,所以会稍微激烈点,望见谅。&br&&p&=====&/p&&p&作者第二篇博客指导云风怎么定位问题,对象错了,应该来指导我。但是一个没写过几行程序,就把微博弄个认证为程序员的哥们来指导我,以我这种不追求上进的性格,肯定是呵呵呵^_^。&/p&&br&仔细看了下,作者好像没什么被喷的价值。豆瓣上那十来篇博客(&a href=&/people/jgs/notes& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sinclair的日记&i class=&icon-external&&&/i&&/a&),没看到提出个什么了不起的想法,更没看到代码是怎么写的。当然了,作者认为:“代码只是记录思想的工具,而且绝大部分代码都是废话。看书比写代码重要的多的多。”不敢喷看书多的,万一在某本书的某个旮旯里面有个什么真理,读书少的我没看到,被抓住尾巴了,就不用混了^_^。&br&&br&=====&br&说下自己的经历。&br&入行初期,在华为待了四年多,基本不能上网查资料,更不用说上网灌水了。也不关注开源,更别提写博客了。但是在那个环境里,就有真正的工程师,他们在各种体系结构下一行一行汇编的分析性能,一个一个机器码的扣bug。把各种完全没有头绪,没有调试信息的现象弄得一清二楚。这样的人,我觉得牛逼极了,佩服得五体投地。受到感染,学了点皮毛,我居然以此本钱转行安全领域,写了一年内核程序。&br&&br&后来又混了一段时间,认识了云风。我发现云风的行为,跟我以前的认知不太一样。虽然写很牛B的代码,但是定位问题大部分居然靠看代码这么原始的行为。然后,好几次,我重现来重现去,gdb寄存器一个个查,找不到原因。。。居然被他看出来了=。=!我的感觉就是,偶像啊。。。。&br&&br&另外,我不认识自以为读书特别多,掌握计算机科学真理的牛B程序员。这类牛评价不了。&br&=======================&br&作者来贴代码了,那我就不客气打脸啦。&br&&br&首先,q.h那个简化代码,把别人需求弄漏了,懒得说了。&br&然后,大牛作者自己贴了一个大约相当于小学生水平的实现,居然还做了profile;我先截个图,防止被删。下面看图:&br&&img src=&///288e98ef6fb45b96ecb173_b.jpg& data-rawwidth=&581& data-rawheight=&702& class=&origin_image zh-lightbox-thumb& width=&581& data-original=&///288e98ef6fb45b96ecb173_r.jpg&&简单说,这段实现有4个错误,两个低级错误,一个作者自称为专家领域的并发错误,还有一个设计错误。&br&1. 低级错误1: push应该在while循环里面每次重置tail的值,否则这个程序基本可以算是死循环。当然实际不会,频繁插入的话,在循环sizeof(q-&msgs)次有几率会回来。测试的时候有没有看到自己CPU一直很高呢?&br&2. 低级错误2:pop函数里面把错误1重复了一遍。&br&3. 并发错误:假设把上面两个错误改了,代码可以基本正确的运行。那么在push ok之后,q-&msgs[tail & QMSK] =这行代码打个断点,然后把这个线程frozen住;pop继续,等到pop到那个tail值的时候,取出来的是什么?来解释一下,这个算什么水平的问题?&br&4. 设计错误:如果数组满了再push消息怎么办,这个实现的意思是返回错误,那你让调用者把消息放哪里?丢掉?重试?如果一直处于满状态,又是无锁队列,重试不就相当于很多线程轮流死循环一会。你看看原实现怎么处理的。&br&&br&所以,好心建议先做个单元测试再做profile吧。&br&&br&===============&br&原作者update1:&br&作者居然又更新代码了,那就再截个图,嗯,两个低级bug改掉了,还剩下两个呢。加油改!&br&&img src=&///ac67c201ab4_b.jpg& data-rawwidth=&617& data-rawheight=&749& class=&origin_image zh-lightbox-thumb& width=&617& data-original=&///ac67c201ab4_r.jpg&&&br&======&br&原作者update2:&br&好吧,作者第二次更新实现了,号称:“这次不给个教科书级别的不行了” 。。。。这是要把知乎当成github用吗?我对代码的评价是,你看的教科书是幼儿园教科书吗?把逻辑复杂度提升了一个数量级,然后犯了更多的错误,你觉得q-&p.tail = next这句执行之后的结果是什么?忘记说了,你博客里面的那几篇spin lock的分析里面,伪代码错误一堆,看完之后只能哈哈一笑。再截最后一次图,马上睡觉了,你连夜优化吧。&br&&img src=&///da9e485fcd2b67544555_b.jpg& data-rawwidth=&573& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&573& data-original=&///da9e485fcd2b67544555_r.jpg&&=======&br&隔了一夜,来看原作者update3:&br&代码在&a href=&/D72PWT0z& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/D72PWT0z&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& ,还是一如既往的没实现对。另外,你的测试代码测试过程,我都没看。我相信能把错误代码测出卓越结果的测试过程,也能把正确实现测出错误结果。我对测试结果的回应:skynet框架已经在生产环境中支撑了同服10多W玩家同时在线游戏,如果核心调度层效率如测试结果般不堪,skynet早被我们自己唾弃无数遍了。&br&======&br&嗯,原作者已经抓狂了,目的已达到,呵呵!我对着代码一行行解读,都能把原作者惹抓狂。试想下,如果一个人连别人实现的东西都没看懂,照着别人短短数十行的代码反复重写了一夜,都写不对,还敢跳出来喷人水货。这需要多大勇气?&br&原博中提到的“打破沙锅问到底”的态度,就是这么支撑着你一次一次来提交错误代码,浪费别人时间看的?你提交的代码仔细测试了吗?错第一次时都告诉你错在哪和重现步骤了,有去验证吗?这种态度,别说做学问了,就是写个简单的业务逻辑都能坑死队友。&br&最后回应一下,后面的新代码更新,恕不跟近打脸了!太没技术含量,无法兴奋了-_-!&br&=======&br&既然一直在讨论这段代码,那我再补充一下。&br&这段代码,在历史上出于不同考虑,有个好几个版本。&br&两年前的版本是无锁的,代码如下:&br&&a href=&/xjdrew/skynet/blob/aed83ea5e87e47cc3fdc745bac8029/skynet-src/skynet_mq.c& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&skynet/skynet_mq.c at aed83ea5e87e47cc3fdc745bac8029 · xjdrew/skynet · GitHub&i class=&icon-external&&&/i&&/a&&br&在外部保证队列不会满的情况下,两年前的实现是对的,我们也使用了两年(云风在skynet主干分支上改实现,我们项目已稳定运行,不想跟进,就fork出来自己维护分支,所以中间的其他几版实现被我无视了)。大家可以看看原始版本的实现,比作者贴的无锁实现不知道简洁到哪里去了。关键还是对的。&br&&br&但是一直有个特殊场景下的瑕疵困扰着我们(可以去看云风原博),那个现象一直得不到合理的解释。追求每个计算机现象都有合理解释的工程师应该能够明白,这事一直成了我们的心病。然后,偶然,我定位一个不相干bug的时候,找到了解释,于是就有了现在的有锁版实现。至于这个有锁版实现是怎么解释那个诡异现象的,云风原博没说,我这里也懒得说了(说道skynet实现细节就没意思了)。skynet资深玩家,看看调度上下文应该能够明白。&br&最新代码地址:&a href=&/cloudwu/skynet/blob/dev/skynet-src/skynet_mq.c& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&skynet/skynet_mq.c at dev · cloudwu/skynet · GitHub&i class=&icon-external&&&/i&&/a&&br&这份实现就是云风说的悲观锁实现:&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&k&&struct&/span& &span class=&n&&global_queue&/span& &span class=&p&&{&/span&
&span class=&k&&struct&/span& &span class=&n&&message_queue&/span& &span class=&o&&*&/span&&span class=&n&&head&/span&&span class=&p&&;&/span&
&span class=&k&&struct&/span& &span class=&n&&message_queue&/span& &span class=&o&&*&/span&&span class=&n&&tail&/span&&span class=&p&&;&/span&
&span class=&kt&&int&/span& &span class=&n&&lock&/span&&span class=&p&&;&/span&
&span class=&p&&};&/span&
&span class=&cp&&#define LOCK(q) while (__sync_lock_test_and_set(&(q)-&lock,1)) {}&/span&
&span class=&cp&&#define UNLOCK(q) __sync_lock_release(&(q)-&lock);&/span&
&span class=&kt&&void&/span&
&span class=&nf&&skynet_globalmq_push&/span&&span class=&p&&(&/span&&span class=&k&&struct&/span& &span class=&n&&message_queue&/span& &span class=&o&&*&/span& &span class=&n&&queue&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&struct&/span& &span class=&n&&global_queue&/span& &span class=&o&&*&/span&&span class=&n&&q&/span&&span class=&o&&=&/span& &span class=&n&&Q&/span&&span class=&p&&;&/span&
&span class=&n&&LOCK&/span&&span class=&p&&(&/span&&span class=&n&&q&/span&&span class=&p&&)&/span&
&span class=&n&&assert&/span&&span class=&p&&(&/span&&span class=&n&&queue&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span& &span class=&o&&==&/span& &span class=&nb&&NULL&/span&&span class=&p&&);&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&n&&q&/span&&span class=&o&&-&&/span&&span class=&n&&tail&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&n&&q&/span&&span class=&o&&-&&/span&&span class=&n&&tail&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span& &span class=&o&&=&/span& &span class=&n&&queue&/span&&span class=&p&&;&/span&
&span class=&n&&q&/span&&span class=&o&&-&&/span&&span class=&n&&tail&/span& &span class=&o&&=&/span& &span class=&n&&queue&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span& &span class=&k&&else&/span& &span class=&p&&{&/span&
&span class=&n&&q&/span&&span class=&o&&-&&/span&&span class=&n&&head&/span& &span class=&o&&=&/span& &span class=&n&&q&/span&&span class=&o&&-&&/span&&span class=&n&&tail&/span& &span class=&o&&=&/span& &span class=&n&&queue&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&n&&UNLOCK&/span&&span class=&p&&(&/span&&span class=&n&&q&/span&&span class=&p&&)&/span&
&span class=&p&&}&/span&
&span class=&k&&struct&/span& &span class=&n&&message_queue&/span& &span class=&o&&*&/span&
&span class=&nf&&skynet_globalmq_pop&/span&&span class=&p&&()&/span& &span class=&p&&{&/span&
&span class=&k&&struct&/span& &span class=&n&&global_queue&/span& &span class=&o&&*&/span&&span class=&n&&q&/span& &span class=&o&&=&/span& &span class=&n&&Q&/span&&span class=&p&&;&/span&
&span class=&n&&LOCK&/span&&span class=&p&&(&/span&&span class=&n&&q&/span&&span class=&p&&)&/span&
&span class=&k&&struct&/span& &span class=&n&&message_queue&/span& &span class=&o&&*&/span&&span class=&n&&mq&/span& &span class=&o&&=&/span& &span class=&n&&q&/span&&span class=&o&&-&&/span&&span class=&n&&head&/span&&span class=&p&&;&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&n&&mq&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&n&&q&/span&&span class=&o&&-&&/span&&span class=&n&&head&/span& &span class=&o&&=&/span& &span class=&n&&mq&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span&&span class=&p&&;&/span&
&span class=&k&&if&/span&&span class=&p&&(&/span&&span class=&n&&q&/span&&span class=&o&&-&&/span&&span class=&n&&head&/span& &span class=&o&&==&/span& &span class=&nb&&NULL&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&n&&assert&/span&&span class=&p&&(&/span&&span class=&n&&mq&/span& &span class=&o&&==&/span& &span class=&n&&q&/span&&span class=&o&&-&&/span&&span class=&n&&tail&/span&&span class=&p&&);&/span&
&span class=&n&&q&/span&&span class=&o&&-&&/span&&span class=&n&&tail&/span& &span class=&o&&=&/span& &span class=&nb&&NULL&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&n&&mq&/span&&span class=&o&&-&&/span&&span class=&n&&next&/span& &span class=&o&&=&/span& &span class=&nb&&NULL&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&span class=&n&&UNLOCK&/span&&span class=&p&&(&/span&&span class=&n&&q&/span&&span class=&p&&)&/span&
&span class=&k&&return&/span& &span class=&n&&mq&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&br&大牛作者可以重新分析了,加油!&br&&br&=====&br&&p&利益相关:我是云风说的那个spin lock PR的作者。&/p&&p&=========&/p&&p&尼玛,我就有理有据打个脸,有必要那么认真的点反对吗?我说错啥了,除了态度恶劣点外^_^。&/p&
计算机科学与技术,一部分人是当成科学来研究的,一部分是当成技术来用的;程序员基本属于后者;但这里面有一部分以为看了几遍前者的论文,就非常了不起了,高高的站在鄙视链顶端乱喷。=======本来就是不擅长写这么多字的程序员,下面的话又是开了嘲讽技以…
面向对象编程的一个重要概念是对象的生命周期。不管是int这种原始类型值,还是string这种类的类型,都可以认为是对象,有自己的生命周期。函数临时变量的生命周期从定义它的语句开始,到作用域结束为止,可以简单认为是套住它的大括号之间。对象生命周期结束之前会进行析构,对于int这种原始类型其析构的逻辑是不作任何操作,对于string这种类对象调用其析构函数。&br&&br&函数的临时变量都存在栈上,栈是系统给每个线程分配的一整块内存空间,这块内存在线程结束前是不会回收的。函数内的每个变量都&b&临时占有&/b&一小块,这也是它们称作临时变量的原因。函数返回后,这些变量(对象)的生命周期结束,这些内存空间会在下次函数调用中继续使用,由其它临时变量再临时占有。这就像坐公交车有很多座位,乘客上车坐到座位上,下车之后这个座位其它乘客还可以做。如果某个乘客一边坐车一边吃零食,下车之后垃圾没带走留在座位上,其它乘客想要坐就应该先清理这些垃圾。&br&&br&对应到你这段程序中,进入到函数fun,栈上的一块空间由a临时占用,a是int时,写入了12345,返回时由于原始变量析构逻辑是什么也不做,这块空间内的值依然是12345,你在外面访问它还能得到12345。如果你调用其它函数后再访问这个值就很可能不一样了。而a是string的时候调用了string的析构方法,已经清空了其内存(严格来说还有堆的问题,不影响),所以返回后立即访问是空。同理中间有其它函数调用再访问情况是不一样的。&br&&br&总的来说,出了作用域的临时变量中内容是未定义的,不应该继续使用。而声明原始变量时也一定要先初始化,因为其中可能包含之前其它函数调用是临时变量的垃圾数据。声明类对象的时候,会自动调用类的构造函数以完成初始化的任务,因此构造函数有应该将所有类成员初始化,保证它们都在可用的状态。
面向对象编程的一个重要概念是对象的生命周期。不管是int这种原始类型值,还是string这种类的类型,都可以认为是对象,有自己的生命周期。函数临时变量的生命周期从定义它的语句开始,到作用域结束为止,可以简单认为是套住它的大括号之间。对象生命周期结…
首先我们有一个&br&以一个int*为参数返回一个int*的函数:&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&kt&&int&/span& &span class=&o&&*&/span& &span class=&nf&&func1&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&o&&*&/span&&span class=&n&&p&/span&&span class=&p&&){&/span&
&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&p&/span&&span class=&p&&)&/span&&span class=&o&&++&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&n&&p&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&然后弄个指针指向func1:&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&kt&&int&/span& &span class=&o&&*&/span&&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&pf1&/span&&span class=&p&&)(&/span&&span class=&kt&&int&/span&&span class=&o&&*&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&这就是题主的问题。&br&&br&深入一步,如果我们要做一个以这个指向func1的指针做参数,返回指向func1的指针的函数:&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&kt&&int&/span&&span class=&o&&*&/span& &span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&func2&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&pf1&/span&&span class=&p&&)(&/span&&span class=&kt&&int&/span&&span class=&o&&*&/span&&span class=&p&&)),&/span&&span class=&kt&&int&/span& &span class=&o&&*&/span&&span class=&n&&p&/span&&span class=&p&&))(&/span&&span class=&kt&&int&/span&&span class=&o&&*&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&n&&cout&/span&&span class=&o&&&&*&/span&&span class=&p&&(&/span&&span class=&n&&pf1&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&))&/span&&span class=&o&&&&&/span&&span class=&n&&endl&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&n&&pf&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&或者按C++11的最新标准:&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&k&&auto&/span& &span class=&nf&&func3&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&pf1&/span&&span class=&p&&)(&/span&&span class=&kt&&int&/span&&span class=&o&&*&/span&&span class=&p&&)),&/span&&span class=&kt&&int&/span& &span class=&o&&*&/span&&span class=&n&&p&/span&&span class=&p&&)&/span& &span class=&o&&-&&/span& &span class=&kt&&int&/span& &span class=&o&&*&/span&&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&p&&)(&/span&&span class=&kt&&int&/span&&span class=&o&&*&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&n&&cout&/span&&span class=&o&&&&*&/span&&span class=&p&&(&/span&&span class=&n&&pf1&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&))&/span&&span class=&o&&&&&/span&&span class=&n&&endl&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&n&&pf&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&或者直接用typedef:&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&k&&typedef&/span& &span class=&kt&&int&/span&&span class=&o&&*&/span&&span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&PF1&/span&&span class=&p&&)(&/span&&span class=&kt&&int&/span&&span class=&o&&*&/span&&span class=&p&&);&/span&
&span class=&n&&PF1&/span& &span class=&nf&&func4&/span& &span class=&p&&(&/span&&span class=&n&&PF1&/span& &span class=&n&&pf1&/span&&span class=&p&&,&/span&&span class=&kt&&int&/span& &span class=&o&&*&/span&&span class=&n&&p&/span&&span class=&p&&){&/span&
&span class=&n&&cout&/span&&span class=&o&&&&*&/span&&span class=&p&&(&/span&&span class=&n&&pf1&/span&&span class=&p&&(&/span&&span class=&n&&p&/span&&span class=&p&&))&/span&&span class=&o&&&&&/span&&span class=&n&&endl&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&n&&pf1&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&再深入一步。。怎么做一个指向func2/func3/func4的指针。。?&br&我这次绝壁不会这么做。。而是直接用typedef。。不然会被累死。。&br&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&k&&typedef&/span& &span class=&nf&&PF1&/span& &span class=&p&&(&/span&&span class=&o&&*&/span&&span class=&n&&PF2&/span&&span class=&p&&)(&/span&&span class=&n&&PF1&/span&&span class=&p&&,&/span&&span class=&kt&&int&/span&&span class=&o&&*&/span&&span class=&p&&);&/span&
&span class=&n&&PF2&/span& &span class=&n&&pf2&/span& &span class=&o&&=&/span& &span class=&o&&&&/span&&span class=&n&&func2&/span&&span class=&p&&;&/span&
&span class=&n&&pf2&/span& &span class=&o&&=&/span& &span class=&o&&&&/span&&span class=&n&&func3&/span&&span class=&p&&;&/span&
&span class=&n&&pf2&/span& &span class=&o&&=&/span& &span class=&o&&&&/span&&span class=&n&&func4&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&当然,我们还可以继续做一个指针函数指向以PF2为参数,返回一个PF2的函数。。但是我一定会使用typedef。。接下来就是大同小异了。。
首先我们有一个以一个int*为参数返回一个int*的函数:int * func1(int *p){
}然后弄个指针指向func1:int *(*pf1)(int*);
这就是题主的问题。深入一步,如果我们要做一个以这个指向func1的指针做参数,返回指向func1的指针的函数:int*…
做个父类带两个纯虚函数,Activate和Unactivate,A1~4继承并实现。View中存一个父类指针,而不是第几个view。
做个父类带两个纯虚函数,Activate和Unactivate,A1~4继承并实现。View中存一个父类指针,而不是第几个view。
&p&C++的好处就是,没有父类,组合一下也就有父类了:&/p&&br&&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&k&&class&/span& &span class=&nc&&Bitch&/span&
&span class=&p&&{&/span&
&span class=&k&&public&/span&&span class=&o&&:&/span&
&span class=&k&&virtual&/span& &span class=&kt&&void&/span& &span class=&n&&Activate&/span&&span class=&p&&()&/span&&span class=&o&&=&/span&&span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&k&&virtual&/span& &span class=&kt&&void&/span& &span class=&n&&UnActivate&/span&&span class=&p&&()&/span&&span class=&o&&=&/span&&span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&n&&virtua&/span& &span class=&o&&~&/span&&span class=&n&&Bitch&/span&&span class=&p&&(){}&/span&
&span class=&p&&};&/span&
&span class=&k&&template&/span&&span class=&o&&&&/span&&span class=&k&&typename&/span& &span class=&n&&Fuck&/span&&span class=&o&&&&/span&
&span class=&k&&class&/span& &span class=&nc&&Shit&/span& &span class=&o&&:&/span& &span class=&k&&public&/span& &span class=&n&&Bitch&/span&
&span class=&p&&{&/span&
&span class=&k&&private&/span&&span class=&o&&:&/span&
&span class=&n&&Fuck&/span& &span class=&n&&fuck&/span&&span class=&p&&;&/span&
&span class=&k&&public&/span&&span class=&o&&:&/span&
&span class=&kt&&void&/span& &span class=&n&&Activate&/span&&span class=&p&&()&/span&&span class=&k&&override&/span&
&span class=&p&&{&/span&
&span class=&n&&fuck&/span&&span class=&p&&.&/span&&span class=&n&&Activate&/span&&span class=&p&&();&/span&
&span class=&p&&}&/span&
&span class=&kt&&void&/span& &span class=&n&&UnActivate&/span&&span class=&p&&()&/span&&span class=&k&&override&/span&
&span class=&p&&{&/span&
&span class=&n&&fuck&/span&&span class=&p&&.&/span&&span class=&n&&UnActivate&/span&&span class=&p&&();&/span&
&span class=&p&&}&/span&
&span class=&p&&};&/span&
&span class=&k&&class&/span& &span class=&nc&&View&/span&
&span class=&p&&{&/span&
&span class=&k&&private&/span&&span class=&o&&:&/span&
&span class=&n&&vector&/span&&span class=&o&&&&/span&&span class=&n&&shared_ptr&/span&&span class=&o&&&&/span&&span class=&n&&Bitch&/span&&span class=&o&&&&&/span& &span class=&n&&bitches&/span&&span class=&p&&;&/span&
&span class=&kt&&int&/span& &span class=&n&&activated&/span&&span class=&p&&;&/span&
&span class=&k&&public&/span&&span class=&o&&:&/span&
&span class=&n&&View&/span&&span class=&p&&()&/span&
&span class=&p&&{&/span&
&span class=&n&&bitches&/span&&span class=&p&&.&/span&&span class=&n&&Add&/span&&span class=&p&&(&/span&&span class=&n&&make_shared&/span&&span class=&o&&&&/span&&span class=&n&&Shit&/span&&span class=&o&&&&/span&&span class=&n&&SubViewA1&/span&&span class=&o&&&&&/span&&span class=&p&&());&/span&
&span class=&n&&bitches&/span&&span class=&p&&.&/span&&span class=&n&&Add&/span&&span class=&p&&(&/span&&span class=&n&&make_shared&/span&&span class=&o&&&&/span&&span class=&n&&Shit&/span&&span class=&o&&&&/span&&span class=&n&&SubViewA2&/span&&span class=&o&&&&&/span&&span class=&p&&());&/span&
&span class=&n&&bitches&/span&&span class=&p&&.&/span&&span class=&n&&Add&/span&&span class=&p&&(&/span&&span class=&n&&make_shared&/span&&span class=&o&&&&/span&&span class=&n&&Shit&/span&&span class=&o&&&&/span&&span class=&n&&SubViewA3&/span&&span class=&o&&&&&/span&&span class=&p&&());&/span&
&span class=&n&&bitches&/span&&span class=&p&&.&/span&&span class=&n&&Add&/span&&span class=&p&&(&/span&&span class=&n&&make_shared&/span&&span class=&o&&&&/span&&span class=&n&&Shit&/span&&span class=&o&&&&/span&&span class=&n&&SubViewA4&/span&&span class=&o&&&&&/span&&span class=&p&&());&/span&
&span class=&p&&}&/span&
&span class=&kt&&void&/span& &span class=&n&&Activate&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span& &span class=&n&&index&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&kt&&int&/span& &span class=&n&&counter&/span&&span class=&o&&=&/span&&span class=&mi&&0&/span&&span class=&p&&;&/span&
&span class=&k&&for&/span&&span class=&p&&(&/span&&span class=&k&&auto&/span& &span class=&nl&&bitch&/span& &span class=&p&&:&/span& &span class=&n&&bitches&/span&&span class=&p&&)&/span&
&span class=&p&&{&/span&
&span class=&k&&if&/span& &span class=&p&&(&/span&&span class=&n&&index&/span& &span class=&o&&==&/span& &span class=&n&&counter&/span&&span class=&o&&++&/span&&span class=&p&&)&/span& &span class=&n&&bitch&/span&&span class=&o&&-&&/span&&span class=&n&&Activate&/span&&span class=&p&&();&/span& &span class=&k&&else&/span& &span class=&n&&bitch&/span&&span class=&o&&-&&/span&&span class=&n&&Unactivate&/span&&span class=&p&&();&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&
C++的好处就是,没有父类,组合一下也就有父类了:class Bitch
virtual void Activate()=0;
virtual void UnActivate()=0;
virtua ~Bitch(){}
template&typename Fuck&
class Shit : public Bitch
C++的我觉得可以看 Muduo。因为可以参照着陈硕的《Linux 多线程编程》着看,学习曲线比较平稳。当然如果连《Effective C++》和《STL 源码剖析》都没看过的话,那还是先看懂后两者吧。&br&&br&C语言的看 Nginx。当然是在有一定使用经验和Nginx 模块开发经验的前提下去看源码,会高效很多。什么基础都没有的情况下,直接看源码其实是很低效的阅读源码的方式。&br&听说《Redis 设计与实现》也不错。
C++的我觉得可以看 Muduo。因为可以参照着陈硕的《Linux 多线程编程》着看,学习曲线比较平稳。当然如果连《Effective C++》和《STL 源码剖析》都没看过的话,那还是先看懂后两者吧。C语言的看 Nginx。当然是在有一定使用经验和Nginx 模块开发经验的前提下…
&p&谢邀。题主问的是C++,那我们就不扯其他语言。&/p&&br&&p&我认为学习C++并深入理解各种高级功能和语法的最好途径就是自己去实现所有需要用到的STL的功能,例如Vector, String, Dictionary, SmartPtr等等。这可以迫使你了解几乎所有的语言特性以及C++的RAII机制。C++11的vararg templates有什么用?你去实现一个类似C#里面的Func&&类就知道了。&/p&&br&&p&总的来说,从使用类库(如qt)的角度去理解一个语言是低效的。应该自己去开发一个充分利用语言特性的库。&/p&
谢邀。题主问的是C++,那我们就不扯其他语言。我认为学习C++并深入理解各种高级功能和语法的最好途径就是自己去实现所有需要用到的STL的功能,例如Vector, String, Dictionary, SmartPtr等等。这可以迫使你了解几乎所有的语言特性以及C++的RAII机制。C++11…
不会分配多个,只不过有可能会对同一个local static构造多次。两个线程,如果同时调用这个包含local static对象的函数,它们都会认为这个对象还没有被构造过,所以会构造两次。&br&Effective C++里说的手动调用一次函数,只是保证初始化只进行一次,并不能保证之后没有问题。比如&br&&div class=&highlight&&&pre&&code class=&language-cpp&&&span class=&kt&&int&/span&&span class=&o&&&&/span& &span class=&n&&foo&/span&&span class=&p&&()&/span&
&span class=&p&&{&/span&
&span class=&k&&static&/span& &span class=&kt&&int&/span& &span class=&n&&x&/span&&span class=&p&&;&/span&
&span class=&k&&return&/span& &span class=&n&&x&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&两个线程如果同时调用foo()+=100,可能一个线程在执行foo()+100,还没有把结果赋值给foo(),另一个线程又执行了,最后导致了static int x只增加了100,而不是200。这就是&a class=& wrap external& href=&http://en.wikipedia.org/wiki/Race_condition& target=&_blank& rel=&nofollow noreferrer&&Race condition&i class=&icon-external&&&/i&&/a&,题主可以看看多线程的同步方面的知识,在此就不加赘述了。&br&Effective C++里描述的问题的根源不是这个函数的问题,而是non-const static对象(全局或者局部)本身在多线程里会出现的问题,而书中的手动调用方式,解决的也只是初始化时的race condition。non-const static对象的race condition可以通过信号量等方法来解决,但是正如书中所说,除非必要,让一个线程等待另一个线程完成操作不是一个好主意。
不会分配多个,只不过有可能会对同一个local static构造多次。两个线程,如果同时调用这个包含local static对象的函数,它们都会认为这个对象还没有被构造过,所以会构造两次。Effective C++里说的手动调用一次函数,只是保证初始化只进行一次,并不能保证…
其实 STL 本身固有的问题很多。这些年来,虽然其实现越来越好,造成的麻烦越来越少,但是,如果一个项目要求不用,我还是会欣然接受的。&br&&br&&ol&&li&Template 造成的代码膨胀太糟糕。尤其是使用 map 之后。代码由类型的 combination 造成急剧上涨。&/li&&li&对 binary interface 的破坏严重。尤其是 Microsoft 的实现,加入了一些宏控制 binary interface。如果用不好会莫名的 crash。&/li&&li&list 的实现思路有问题。一般的工程把 prev/next 指针实现在 struct 中。而 std::list 是将用户对象之外包一层,无法直接访问 prev/next。而其 iterator 又有可能实效。造成的问题是,判断一个 node 是否在 list 中都成了很困难的操作。&/li&&/ol&&br&再次说明,以上不是绝对不用 STL 的理由,但是说明不用 STL 绝不是什么 legacy 或者过时的考虑。Template 及其衍生的类库设计是存在很多固有问题的。
其实 STL 本身固有的问题很多。这些年来,虽然其实现越来越好,造成的麻烦越来越少,但是,如果一个项目要求不用,我还是会欣然接受的。Template 造成的代码膨胀太糟糕。尤其是使用 map 之后。代码由类型的 combination 造成急剧上涨。对 binary interface …
TCP用于对可靠性要求高于及时性的场合&br&UDP适用于对及时性要求高于可靠性的场合,支持一对多(Mulitcast)模式,能大大节省网络带宽,减轻数据源端的压力。
TCP用于对可靠性要求高于及时性的场合UDP适用于对及时性要求高于可靠性的场合,支持一对多(Mulitcast)模式,能大大节省网络带宽,减轻数据源端的压力。
去掉为了兼容C的而设置的那些蹩脚语法。&br&去掉多重继承,使用接口。&br&类成员函数和析构函数默认virtual。&br&C++里其他的和C无关的那些东西都挺好得。
去掉为了兼容C的而设置的那些蹩脚语法。去掉多重继承,使用接口。类成员函数和析构函数默认virtual。C++里其他的和C无关的那些东西都挺好得。
剪裁?没想过……&br&每当不得不写一些肮脏或者啰嗦的代码时,就会觉得C++的功能还是不够多,还要再加些东西进去才对,比如:&br&&ul&&li&重载“.”,这样就可以做smart reference,比如generic proxy之类&/li&&li&加入&[]=&操作符,每次使用或者自制关联容器的时候我就忍不住要说脏话……&/li&&li&类似于D的&static if&和&compiles& trait,这样你就可以玩弄meta programming而不是被它玩弄,神马enable_if/is_convertible之类的垃圾统统可以不要鸟挖&/li&&li&……&/li&&/ul&
剪裁?没想过……每当不得不写一些肮脏或者啰嗦的代码时,就会觉得C++的功能还是不够多,还要再加些东西进去才对,比如:重载“.”,这样就可以做smart reference,比如generic proxy之类加入"[]="操作符,每次使用或者自制关联容器的时候我就忍不住要说脏…
10038 人关注
265 个回答
2144 人关注
402 个回答
3808 人关注
170 个回答
1934 人关注
246 人关注
417 个回答

我要回帖

更多关于 体育特长生高考分数线 的文章

 

随机推荐