百科问答小站 logo
百科问答小站 font logo



C++ 的 switch 为什么不自动加 break? 第1页

  

user avatar   pansz 网友的相关建议: 
      

C++ 的 switch 语句并不是用来替代 if else 的,而是来自 C 语言

至于 C 语言为什么会有 switch ?因为它就是复刻的汇编语言的跳转表的结构。

为什么这么做呢?因为 C 语言当初设计是为了跨平台,是想为汇编语言不同的各种CPU,设计一种通用语言,把不同CPU对应的汇编语言所拥有的特性大部分实现,所以要努力复刻汇编语言中的跳转表特性,这个特性难以用 if-else 高效的表达。

(注:解释一下,C语言所谓的跨平台是CPU体系架构层面的跨平台,而Java的跨平台是操作系统层面的跨平台。)

所以题主明白了?C 语言的 switch 从来就不是 if-else 的语法糖,而是为了映射汇编语言跳转表功能的语言对应,它设计成这个样子就只是为了实现汇编语言中的某个功能,类似的功能必须用不带自动break的switch结构来实现。

至于 C++,它本身目前还根本没有「你想要的那种」switch,或者说它没有那种单纯作为 if-else 语法糖的 switch 。

在 C、C++ 中,只有当条件判断可以做成跳转表的情况下,才适合使用 switch,其它情况下应该使用 if-else,把 C 跟 C++ 的 switch 作为 if-else 语法糖,是一种滥用跟误用。


user avatar   damon-dance-for-me 网友的相关建议: 
      

这两个游戏都有自己的问题。但严重程度完全不一样。

赛博朋克最大的问题是人力不够,没有人手把愿景在限期内做出来,导致后期狂砍。但从已有的成品来看,CDPR是完全有人才有能力把东西做出来的,只不过没时间做。光影效果,已有的垂直城市设计,以及主线和很多支线任务的演出都有毫不输巫师3的气质,尤其是日本城浮空平台那关,无论是游戏流程还是画面还是音乐,都把类似银翼杀手2047的那种气氛和感受做到了极致。有人说CDPR的人才都跑了,或者CDPR傲娇了开始放水,这并不客观。2077确实是个半成品,主机优化的问题尤其严重,但你关注已经完成的部分,用高配置PC玩,其质量并未令人失望,依然是巫师3的水准。

2077就像是一个优等生忘了做背后的几题的考卷,开天窗导致不及格,但已经做了的题目还是正确率极高的。

谈到E3的demo,单从画面上讲你很难说它缩水了。只不过CDPR没告诉你想要E3画面,就得上3080+光线追踪。。。

我猜想没有光追的话,游戏在大多数情况下也是可以达到光追的效果的,只不过人工工作量会很大,有些地方需要离线烘培,而有些地方需要人工设置虚拟光源。CDPR可能发现项目后期工作量太大搂不住了,就上了光追这个大杀器。。。


至于无人深空,现在口碑很好,但我要不客气地讲,这个游戏到了今天依然是垃圾,只配卖$19.95,打折的时候卖2.95的那种。

Hello工作室自始自终都没有把初始愿景实现的技术能力。

你可以看无人深空进入大气层的技术实现。先是一段飞船进入大气层摩擦发红的特效,然后可以看见地形通过一种非常粗糙、视距很近的情况下刷新出来,并且刷出来的地貌和太空中看到的地貌完全不同。所以从头到尾,hello工作室都没有类似精英危险和星际公民的无缝行星登陆技术。

无人深空更新了十几次,并没有触动这个游戏除了机械刷就没有任何深度的本质。这是一个极其无聊的游戏。但它刷了两年的DLC,玩家也就给他点面子,没功劳有苦劳。它每次更新我都会进游戏看看,但玩不了半小时就会放弃。一是实在无聊,二是它美术设计和渲染水平有限,色彩及其刺眼。比如在母船机库里,到处都是亮瞎狗眼的点状光源,但这些光源不会照亮周围的任何东西,看的时间长了有种不带护目镜看焊接的流泪效果。你说更新了那么久,这么简单的问题都不解决,有什么用呢。游戏中随处可见低级设计的痕迹,比如说有很多行星上有一种可以卖钱的球,这种球没有任何贴图,只有亮瞎眼的纯白色材质,在HDR效果下极其刺眼,但它又不是个光源,放在地上不会照亮周围任何东西。这种打开Blender就存盘的建模初手垃圾素材居然也能放在游戏里,真是活久见。

所以无人深空就像是一个学渣冒充学霸,把期望提得无限高,却每题都答错结果接近0分,被骂,然后花了漫长的时间在那里订正,一题一题的改,最后终于接近30分了,然后获得了大家的赞赏,全然忘记了它改了那么久依然是不及格。

无人深空的贴图我就不贴了,首发的时候真是纯垃圾,基本上是2008年魔兽世界首发的那个水准。现在也依然是垃圾,开个HDR看着眼睛都疼。




  

相关话题

  深入理解nginx中,第9章中有一句:利用指针的最后一位一定是0的特性。能解释一下这个特性? 
  C++ 父类对象赋值给子类对象是未定义行为么? 
  c/c++语言中,如果不把声明和实现分开,而是直接一起写到头文件中,会有什么不好的影响? 
  C++中除以2和右移1有什么区别? 
  什么时候用C而不用C++? 
  现代C/C++编译器有多智能?能做出什么厉害的优化? 
  面试提问2的10次方是多少是否合适? 
  C 语言中字符串常量的好处在哪里? 
  为什么没有新的支持底层达到类似C++这种程度,而易用性达到C#的语言出现? 
  C语言中指针与数组都可以用a[3]表示,那它们是不是相同? 

前一个讨论
如何看待标题比内容精彩的现象?
下一个讨论
Python有哪些杀手级超厉害框架或库或应用?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利