Так можно?
От: Sashaka Россия  
Дата: 06.11.09 20:19
Оценка:
bool b[/*3*/] = { false, true, b[0] || b[1] };
Re: Так можно?
От: Alexey F  
Дата: 06.11.09 20:50
Оценка:
Здравствуйте, Sashaka, Вы писали:

S>
S>bool b[/*3*/] = { false, true, b[0] || b[1] };
S>

Ссылки на стандарт не дам, но это мало чем отличается от разрешённого:
// было пару случаев, когда обжигался на подобных, но более сложных примерах,
// а ключ компилятора, включавший warning на подобные вещи, был отломан:
int a = a;

int func ( int value ) { ... }

int b = func ( b );

и, следовательно, легально.
Re[2]: А вот и ссылка
От: Alexey F  
Дата: 06.11.09 20:56
Оценка:
Здравствуйте, Alexey F, Вы писали:

AF>Ссылки на стандарт не дам...

Нашёл на удивление быстро:

3.3 Declarative regions and scopes

3.3.1 Point of declaration
1 The point of declaration for a name is immediately after its complete declarator (clause 8) and before its
initializer (if any), except as noted below. [Example:

int x = 12;
{ int x = x; }

Here the second x is initialized with its own (indeterminate) value. ]

Там ниже исключения из этого правила, но они не относятся данному случаю
Re[2]: Так можно?
От: Sashaka Россия  
Дата: 06.11.09 22:58
Оценка:
Здравствуйте, Alexey F, Вы писали:

AF>Здравствуйте, Sashaka, Вы писали:


S>>
S>>bool b[/*3*/] = { false, true, b[0] || b[1] };
S>>

AF>Ссылки на стандарт не дам, но это мало чем отличается от разрешённого:
AF>
AF>// было пару случаев, когда обжигался на подобных, но более сложных примерах,
AF>// а ключ компилятора, включавший warning на подобные вещи, был отломан:
AF>int a = a;

AF>int func ( int value ) { ... }

AF>int b = func ( b );
AF>

AF>и, следовательно, легально.

а студия ругается, пришлось в который раз уступить девушке =)
Re[3]: Так можно?
От: Alexey F  
Дата: 06.11.09 23:34
Оценка:
Здравствуйте, Sashaka, Вы писали:

S>а студия ругается, пришлось в который раз уступить девушке =)

А какая именно?

На всех, приведённых ниже, скомпилировалось:
MS Visual C++ 2005 Express, MS Visual C++ 2008 Express и даже MS Visual C++ 6.0 — полёт нормальный.
Re[4]: Так можно?
От: Sashaka Россия  
Дата: 06.11.09 23:42
Оценка:
Здравствуйте, Alexey F, Вы писали:

AF>Здравствуйте, Sashaka, Вы писали:


S>>а студия ругается, пришлось в который раз уступить девушке =)

AF>А какая именно?

AF>На всех, приведённых ниже, скомпилировалось:

AF>MS Visual C++ 2005 Express, MS Visual C++ 2008 Express и даже MS Visual C++ 6.0 — полёт нормальный.

2008-я, но там код был посложнее.

что-то вроде

bool b[] = 
{
   a==1 || b==2 || c==3,
   d==4 || e==5 || f==6,
   b[0] && b[1] && g==7
};
Re[5]: Так можно?
От: Sashaka Россия  
Дата: 06.11.09 23:46
Оценка:
Здравствуйте, Sashaka, Вы писали:

S>Здравствуйте, Alexey F, Вы писали:


AF>>Здравствуйте, Sashaka, Вы писали:


S>>>а студия ругается, пришлось в который раз уступить девушке =)

AF>>А какая именно?

AF>>На всех, приведённых ниже, скомпилировалось:

AF>>MS Visual C++ 2005 Express, MS Visual C++ 2008 Express и даже MS Visual C++ 6.0 — полёт нормальный.

S>2008-я, но там код был посложнее.


S>что-то вроде

S>

S>bool b[] = 
S>{
S>   a==1 || b==2 || c==3,
S>   d==4 || e==5 || f==6,
S>   b[0] && b[1] && g==7
S>};

S>


странно, не вопроизводится, значит протупил я где-то, может запятую забыл =)
Re[3]: А вот и ссылка
От: Юрий Жмеренецкий ICQ 380412032
Дата: 07.11.09 01:14
Оценка: +1
Здравствуйте, Alexey F, Вы писали:

AF>Здравствуйте, Alexey F, Вы писали:


AF>>Ссылки на стандарт не дам...

AF>Нашёл на удивление быстро:
AF>

AF>3.3 Declarative regions and scopes

AF>3.3.1 Point of declaration
AF>1 The point of declaration for a name is immediately after its complete declarator (clause 8) and before its
AF>initializer (if any), except as noted below. [Example:
AF>

AF>int x = 12;
AF>{ int x = x; }
AF>

AF>Here the second x is initialized with its own (indeterminate) value. ]


Доступ к indeterminate value для объекта типа 'int' может приводить к UB.
Re[6]: Так можно?
От: carpenter Голландия  
Дата: 07.11.09 16:35
Оценка:
Здравствуйте, Sashaka, Вы писали:



S>>bool b[] =

S>>{
S>> a==1 || b==2 || c==3,
S>> d==4 || e==5 || f==6,
S>> b[0] && b[1] && g==7
S>>};

ммм как это ?
Весь мир — Кремль, а люди в нем — агенты
Re[7]: Так можно?
От: Sashaka Россия  
Дата: 07.11.09 21:14
Оценка:
Здравствуйте, carpenter, Вы писали:

C>Здравствуйте, Sashaka, Вы писали:




S>>>bool b[] =

S>>>{
S>>> a==1 || b==2 || c==3,
S>>> d==4 || e==5 || f==6,
S>>> b[0] && b[1] && g==7
S>>>};

C>ммм как это ?


2.46 вот как =)
Re: Так можно?
От: ononim  
Дата: 08.11.09 00:13
Оценка: +1
S>
S>bool b[/*3*/] = { false, true, b[0] || b[1] };
S>

Ее надо писать код "как можно".
Надо как понятно, золотое правило тут такое — если вам непонятно можно ли так писать или это UB, то не пишите так.
Как много веселых ребят, и все делают велосипед...
Re[2]: Так можно?
От: Sashaka Россия  
Дата: 08.11.09 08:59
Оценка:
Здравствуйте, ononim, Вы писали:

S>>
S>>bool b[/*3*/] = { false, true, b[0] || b[1] };
S>>

O>Ее надо писать код "как можно".
O>Надо как понятно, золотое правило тут такое — если вам непонятно можно ли так писать или это UB, то не пишите так.

Я не был уверен, UB это или нет, поэтому и спрашиваю. Естественно так не написал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.