Здравствуйте, varnie, Вы писали:
V>на подобное натыкаюсь зачастую, и приходится вместо этого писать:
V>V> const Foo *pFoo = getFoo();
V> if (pFoo){
V> //работает далее с pFoo
V> }
V> //здесь уже pFoo нет
V>
V>но немного не нравится, т.к. по логике сама переменная pFoo нам нужна только в теле блока if, а получается, что в моем последнем примере она будет доступна далее _после_ тела if. или я много хочу?
Некоторые особо умные компиляторы и так делают такие переменные доступными после тела if
V>спасибо за комменты.
Здравствуйте, Sergey, Вы писали:
>> Чего на самом деле не хватает, так это using, как в C#:
>> using(X x = getX())
>> if(i_like(x) && x.is_very_nice())
>> {
>> . . .
>> }
>> В C++ это можно сделать только через for:
>> http://www.rsdn.ru/forum/message/2397489.1.aspxАвтор: Roman Odaisky
Дата: 07.03.07
S>А чем это лучше обычных фигурных скобок?
Тем, что можно использовать в макросах. Например:
#define DOUBLE_FOR(decl1, decl2, cond1, cond2, upd1, upd2) \
using(decl1) \
for(decl2; (cond1) && (cond2); (upd1), (upd2))
Иногда в макросах нужно вставить несколько объявлений, а for не подходит из-за break/continue, и фигурные скобки не подходят из-за того, что закрывающую скобку ставить некому.
И вообще, код вроде
doSomething();
using(Lock lock(mutex))
{
doSomethingElse();
}
выглядит, по-моему, естественнее, чем фигурные скобки из ниоткуда:
doSomething();
{
Lock lock(mutex);
doSomethingElse();
}
Roman Odaisky пишет:
>> > Чего на самом деле не хватает, так это using, как в C#:
>> > using(X x = getX())
>> > if(i_like(x) && x.is_very_nice())
>> > {
>> > . . .
>> > }
>> > В C++ это можно сделать только через for:
>> > http://www.rsdn.ru/forum/message/2397489.1.aspxАвтор: Roman Odaisky
Дата: 07.03.07
> <http://rsdn.ru/forum/message/2397489.1.aspx>Автор: Roman Odaisky
Дата: 07.03.07
>
> S>А чем это лучше обычных фигурных скобок?
>
> Тем, что можно использовать в макросах. Например:
>
> #define DOUBLE_FOR(decl1, decl2, cond1, cond2, upd1, upd2) \
> using(decl1) \
> for(decl2; (cond1) && (cond2); (upd1), (upd2))
>
>
> Иногда в макросах нужно вставить несколько объявлений, а for не подходит
> из-за break/continue, и фигурные скобки не подходят из-за того, что
> закрывающую скобку ставить некому.
Нда, странные у людей потребности...
> И вообще, код вроде
>
> doSomething();
>
> using(Lock lock(mutex))
> {
> doSomethingElse();
> }
>
>
> выглядит, по-моему, естественнее, чем фигурные скобки из ниоткуда:
>
> doSomething();
>
> {
> Lock lock(mutex);
>
> doSomethingElse();
> }
По-моему наоборот.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.