Изолированный блок

Сергей Ковалёв
Сергей Ковалёв

int cg=0, g2=3;
void fn() {
  int ci,cl;
  c1=1; cl=2;
  box(c1,g2) {
    c1=10; // ok
    g2=4; // ok
    cl=2; // compile-error undefined in block
    cg=0; // compile-error undefined in block
  }
}

#include <stdio.h>
int fn2(int x) box(g2) {
  printf("\n"); // compile-error undefined in block
  return x+g2;
}

 

-14
рейтинг
7 комментариев
yndx-antoshkka
Можно же это делать через лямбды:

int cg=0, g2=3;
void fn() {
int c1=1, cl=2;
[&c1] {
c1=10; // ok
g2=4; // ok, global
cl=2; // compile-error undefined in block
}();
}

int main() {
fn();
}

А еще можно писать содержимое box как отдельную функцию в cpp файле, эффект получится тот же.
yndx-antoshkka
ru.night.beast
не понятно, printf в блоке не видна что-ли?
зачем это может понадобиться?
ru.night.beast
Сергей Ковалёв
ru.night.beast,
затем что в блоке может быть printf и ::printf например
Сергей Ковалёв
dix75
Ну этот кусок кода идеально подходит под рефакторинг, выделение кода в отдельную функцию.
В общем предложение очень напоминает конструкцию let языка javascript, но там введение данной коснтрукции жизненно-необходимо.
dix75
Сергей Ковалёв
Это может понадобиться когда lagacy рефакторишь
Сергей Ковалёв
Сергей Ковалёв
И еще бы добавил возможноть запрета перекрыти видимости локальных переменных
int i; { int i; } // error i hides previous declaration
особенно для всяких вложенных циклов
Сергей Ковалёв
yndx-antoshkka
Сергей Ковалёв, так уже сейчас можно. Берёте современный компилятор и собираете с флагами -Wall -Werror
yndx-antoshkka
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).