Codecademy上C ++ / Program熟悉的任何人都可以解决noob问题?

时间:2019-04-10 18:07:22

标签: c++

我最近开始在Codecademy上学习有关条件的话题。我正在尝试同时使用if + if else和switch + break + default。在本练习的最后一步,我遇到了这个问题。

我们可以使用案例X> y吗?

    function showNav() {
      if (window.pageYOffset >= visible) {
      navbar.classList.add("visible");
     } else {
      navbar.classList.remove("hidden");
       }
     }

1 个答案:

答案 0 :(得分:-1)

switch(X)是“跳转至价值”的快捷方式。之所以用这种语言,是因为存在一个非常简单有效的优化来实现这一目标。

为使此优化有效,可能的值必须是静态的,并且在编译时已知。因此,在case Y:目标中不能有动态/运行时Y。

优化就是这样(简化)的:

  1. 假设您的值可以从0到9。
  2. 为此值创建一个开关,并将10个案例从0改为9。
  3. 编译器将创建一个包含10个条目的表(这是每种情况下内存中代码的地址)
  4. 测试该值时,编译器只需要跳转到表中位置 value 处的地址,这与遵循较长的if / else测试链不同。

这不适用于您的情况,您必须像这样创建if/else链:

enum House { gryffindor, hufflepuff, ravenclaw, slytherin };

std::string getHouse(House house, int & max) {

max = 0;
if (house == gryffindor) max = gryffindor;
else if (house == hufflepuff) max = hufflepuff;
else if (house == ravenclaw) max = ravenclaw;
else max = slytherin;

switch(max){
     case gryffindor: return "gryffindor";
     case hufflepuff: return "hufflepuff";
     case ravenclaw : return "revenclaw";
     case slytherin : return "slytherin";
     default: return "none";
        }    
}

如果您不打算结案,则必须使用break;退出switch程序段。