Текущий Стандарт С++ и перспективы его развития
    
  ![]()  | 
Наши проекты:
 Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту  | 
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS | 
| [216.73.216.5] | 
 
 | 
		
  | 
| Страницы: (81) « Первая ... 68 69 [70] 71 72 ... 80 81 ( Перейти к последнему сообщению ) | 
    Текущий Стандарт С++ и перспективы его развития
    
  | 
         
         
         
          
           Сообщ.
           #1036
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Я же говорю - его можно забыть. И подобные ошибки не так просто искать в сложных случаях. И заметь, все это на ровном месте - конструкция ведь элементарная.  | 
    
| 
         
         
         
          
           Сообщ.
           #1037
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @  Я же говорю - его можно забыть. И подобные ошибки не так просто искать в сложных случаях. В смысле отсуствие брейка ? Ну если конструкция сложная -тогда да, но ведь на это есть форматирование. Цитата D_KEY @  И заметь, все это на ровном месте - конструкция ведь элементарная.  Ну в основном современные IDE даже генерят case вместе с break, если не генерят, тогда да - можно по затупке пропустить сей момент, но вот например точка с запятой ( ; ) после описания класса в хидере - как по мне более весомый косяк, чем тот же break. Причем я реально ловился на этом, и тратил несколько дней на поиск ошибки компиляции, ибо компилятору видимо башню сносит напрочь при отсуствии ; после объявления класса, особенно при наличии сложного наследования. Добавлено Блин смайл встроился, там - ; в скобках предполагалась, вместо смайла. (Я поправил   - Q) 	  | 
    
| 
         
         
         
          
           Сообщ.
           #1038
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Предлагалось вместо break для большинства случаев ставить continue для меньшинства. Как бы почему бы и нет. Но с моей точки зрения это менее интуитивно, т.к. case-ы в switch() это всего лишь метки перехода, а не структурные единицы, поэтому использование break более логично для прерывания последовательности, чем continue для отсутствия прерывания. Ведь отсутствие прерывания последовательности как бы само собой подразумевается по дефолту.   
        
       | 
    
| 
         
         
         
          
           Сообщ.
           #1039
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         В том, что он нужен почти всегда. Ведь куда менее удобно ставить почти всегда break, чем почти всегда не ставить continue. Вон korvin на прошлой странице пример из go приводил - вполне удобно же.  | 
    
| 
         
         
         
          
           Сообщ.
           #1040
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата OpenGL @  В том, что он нужен почти всегда. Ведь куда менее удобно ставить почти всегда break, чем почти всегда не ставить continue. Вон korvin на прошлой странице пример из go приводил - вполне удобно же. Кстати, какой-то break при таком раскладе так же нужен. Ведь мы должны иметь возможность после continue остановиться не только в конце... Или continue/fallthrough только на один case должен опускаться?  | 
    
| 
         
         
         
          
           Сообщ.
           #1041
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @  Ведь мы должны иметь возможность после continue остановиться не только в конце Не понял, о чём ты. Цитата D_KEY @  Или continue/fallthrough только на один case должен опускаться? Да, говоря о continue, я имел ввиду именно это   А в go разве не так?   | 
    
| 
         
         
         
          
           Сообщ.
           #1042
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата OpenGL @  В том, что он нужен почти всегда. Ведь куда менее удобно ставить почти всегда break, чем почти всегда не ставить continue. Ну незнаю. Может я просто привык к такой конструкции, но с break мне кажется всетаки логичней.  | 
    
| 
         
         
         
          
           Сообщ.
           #1043
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата OpenGL @  Цитата D_KEY @  Или continue/fallthrough только на один case должен опускаться? Да, говоря о continue, я имел ввиду именно это   А в go разве не так?Судя по докам - так. Но в таком случае пользоваться этим механизмом для обработки нескольких case неудобно, потребуется отдельный синтаксис. Если в C++ когда-нибудь появится какой-то match для паттерн-матчинга(в каком-то виде), то ситуация будет лучше - старый switch останется для совместимости и трюков, а в обычных случаях можно будет юзать match.  | 
    
| 
         
         
         
          
           Сообщ.
           #1044
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @  Судя по докам - так. Но в таком случае пользоваться этим механизмом для обработки нескольких case неудобно, потребуется отдельный синтаксис. В смысле? Чтобы ![]() ![]() case 1: case 2: case 3:     foo(); обрабатывались очевидным образом? Можно сделать, чтобы при отсутствии операторов внутри одного case автоматически переходило к следующему, как в шарпе.  | 
    
| 
         
         
         
          
           Сообщ.
           #1045
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата OpenGL @  Цитата D_KEY @  Судя по докам - так. Но в таком случае пользоваться этим механизмом для обработки нескольких case неудобно, потребуется отдельный синтаксис. В смысле? Чтобы ![]() ![]() case 1: case 2: case 3:     foo(); обрабатывались очевидным образом? Можно сделать, чтобы при отсутствии операторов внутри одного case автоматически переходило к следующему Ну так это и есть отдельный механизм. И не очень логичный, ИМХО.  | 
    
| 
         
         
         
          
           Сообщ.
           #1046
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          Сейчас будут набигать эксперты и говорить что это все говно, но мне нравится подход D: 
        
      ![]() ![]() int number; string message; switch (number) {     default:    // валидно: заканчивается 'throw'         throw new Exception("unknown number");     case 3:     // валидно: заканчивается 'break' (выходит из 'switch')         message ~= "three ";         break;     case 4:     // валидно: заканчивается 'continue' (продолжает внешний цикл)         message ~= "four ";         continue;     case 5:     // валидно: заканчивается 'goto case' (явный переход к следующему case.)         message ~= "five ";         goto case;     case 6:     // ошибка компиляции: неявный, потенциально ошибочный переход к следующему case         message ~= "six ";     case 1:     // валидно: пустой блок     case 2:     // валидно: последний case в switch.         message = "one or two"; }  | 
    
| 
         
         
         
          
           Сообщ.
           #1047
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата applegame @  Это и не экспертами сразу видно. Подтверждаю, УГ. Сейчас будут набигать эксперты и говорить что это все г...     | 
    
| 
         
         
         
          
           Сообщ.
           #1048
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата Славян @  Таки ты игсперд!  Это и не экспертами сразу видно. Подтверждаю, УГ.  ![]()  | 
    
| 
         
         
         
          
           Сообщ.
           #1049
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
         Цитата D_KEY @  Кстати, какой-то break при таком раскладе так же нужен. Ведь мы должны иметь возможность после continue остановиться не только в конце... Или continue/fallthrough только на один case должен опускаться? Кстати break в Go позволяет выйти не только из for, но и из switch и select. ![]() ![]() switch foo { case 1:     doWhen1()     fallthrough case 2:     doWhen1or2()     break case 3:     ... } Добавлено Цитата D_KEY @  Но в таком случае пользоваться этим механизмом для обработки нескольких case неудобно, потребуется отдельный синтаксис. Зачем отдельный? Просто вставляешь еще один fallthrough. Полотна свичей все равно не нужны. =) Добавлено Цитата D_KEY @  Ну так это и есть отдельный механизм. И не очень логичный, ИМХО. А так?  | 
    
| 
         
         
         
          
           Сообщ.
           #1050
          
          , 
          
         
         
        
       | 
    |
| 
         | 
      
          все эти неудобства в С++ специально сделаны, чтобы отучить С программистов от switch  
        
          |