Поиск:

Ответ в темуСоздание новой темы Создание опроса
> static-член класса то работает, то нет 
:(
    Опции темы
volatile
Дата 15.6.2013, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(mes @  15.6.2013,  13:15 Найти цитируемый пост)
и не обратили почему же стоит "still" и "if" в последнем предложении, которые явно намекают, что должна быть еще одна ситуация..

Намекают - сильно сказано!  smile 
Не сомневаюсь что с вашей выдающейся способностью к софистике и из туманных намеков в купе с "still" и "if" можно вывести все что угодно...


Это сообщение отредактировал(а) volatile - 16.6.2013, 00:03
PM MAIL   Вверх
mes
Дата 16.6.2013, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(volatile @  15.6.2013,  22:38 Найти цитируемый пост)
с "still" и "if" можно вывести все что угодно...

иногда достаточно  просто перечитать заново и вникнуть в пропущенное при первом чтении  smile

Добавлено через 2 минуты и 58 секунд
ладно, чтоб не уходить в переспоривание озвучу свою трактовку с коментариями..


--------------------
PM MAIL WWW   Вверх
mes
Дата 16.6.2013, 01:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



в старом с++ не было constexpr, хотя само константное выражение (как понятие) было. Чтоб получить большую эффективность, пользователю позволяется ассоцировать интегральную константу  с константным выражением. После чего, при употреблении в выражениях ожидающих константное выражение, оно подставляется вместо самой константы.. Самый простой пример
Код

const int n = 10;
int a[n];

В этом случае константа не участвует в процессе, она лишь служит переносчиком константного выражения.. 

Теперь подойдем к классу и нашей цитате.. 
Цитата

If a static data member is of const integral or const enumeration type, 

ну тут понятно без пояснений
Цитата

its declaration in the class definition can specify a constant-initializer which shall be an integral constant expression 

ее объявление (именно объявление, не определение) может быть специфицировано констным выражением. "Объявление" нам говорит, что объект (в памяти) не определен.
Цитата

 In that case, the member can appear in integral constant expressions

В этом случае дата-член может появляться в константном выражении.. Как раз об этом говорилось в начале поста..Не забывайте, что объект  (lvalue в терминах c++)  пока не определен.
Цитата

The member shall still be defined in a namespace scopе, if it is used in the program 

дата-член должен быть к тому же определен вне класса, если используется в программе.
Вот тут наконец то определяем сам объект.. И обратите внимание в первом случае было "появляeтся" (can appeаr), а теперь "используется" (used), потому как в первом случае у нас имелась  только декларация, и использования объекта не было..

Цитата

and the namespace scope definition shall not contain an initializer.

ну тут опять без фокусов, если указали инициализатор при декларации в классе, то при определении вне класса он должен отсутствовать..

Ну вроде и все..

Это сообщение отредактировал(а) mes - 16.6.2013, 10:58


--------------------
PM MAIL WWW   Вверх
volatile
Дата 16.6.2013, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(mes @  16.6.2013,  00:37 Найти цитируемый пост)
иногда достаточно  просто перечитать заново и вникнуть в пропущенное при первом чтении

Да можно хоть сто раз перечитывать. Нет там ничего.

mes,  вашу точку зрения я понял. спасибо.



Это сообщение отредактировал(а) volatile - 16.6.2013, 09:24
PM MAIL   Вверх
volatile
Дата 16.6.2013, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Мес, не обижайтесь, не стоило здесь приводить это все. (хотя еще раз спасибо).
Да я прекрасно понял что вы хотите сказать.
Я и без того, разделяю ваше мнение насчет подстановки констант. 
Еще в начале:
Цитата(volatile @  6.6.2013,  11:06 Найти цитируемый пост)
 (Хотя логически понять причины такого поведения можно)

Беда только в том что все это являецца лишь логическим выводом.
И бездоказательно, к сожалению.

PM MAIL   Вверх
mes
Дата 16.6.2013, 13:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(volatile @  16.6.2013,  10:43 Найти цитируемый пост)

И бездоказательно, к сожалению.

Bjarne Stroustrup - ему можно верить ? 
The C++ Programming Language (Third Edition)
Цитата

10.4.6.2 Member Constants [class.memconst]
..
If (and only if) you use an initialized member in a way that requires it to be stored as an object in
memory, the member must be (uniquely) defined somewhere...


Добавлено @ 13:09
в его ж d&e тоже вроде было на эту тему.. 

Цитата

in a way that requires it to be stored

хотя да, опять догадки.. никаких выводов  smile 

Это сообщение отредактировал(а) mes - 16.6.2013, 16:16


--------------------
PM MAIL WWW   Вверх
volatile
Дата 16.6.2013, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



Цитата(borisbn @  6.6.2013,  11:14 Найти цитируемый пост)
А по поводу оптимизации - вроде в online-компиляторах она выключена... 

borisbn, насколько удалось выяснить в codepad.org например, она включена.
Цитата
flags: -O ... 

Почему в таком случае, он выдает ошибку, (а 4.7.0 абсолютно при тех-же ключах не выдает) остаецца только гадать...

Впрочем не сомневаюсь что mes, опираясь на пару, тройку "still" и "if" в стандарте,
выведет "основательное доказательство" и этому факту.
smile 


Это сообщение отредактировал(а) volatile - 16.6.2013, 23:54
PM MAIL   Вверх
mes
Дата 23.6.2013, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(volatile @  16.6.2013,  22:46 Найти цитируемый пост)
Впрочем не сомневаюсь что mes, опираясь на пару, тройку "still" и "if" в стандарте,
выведет "основательное доказательство" и этому факту.

Так тут дело не в mes`е.. а в самом стандарте, который описан в стиле "всегда так, кроме, когда это не так"  smile 



--------------------
PM MAIL WWW   Вверх
volatile
Дата 23.6.2013, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: нет
Всего: 85



mes, я тут на досуге почесал репу, и понял что мне мешает воспринимать ваши доводы.
Важный вопрос (для меня). У меня есть убежденность, как должен звучать правильный ответ.
Но сие убеждение, основано какбы э.... на вере в некую "космическую гармонию" =)
Но возможно "гармонию" я придумал, и на самом деле ее нет.

И так:
Рассмотрим некий абстрактный идеальный случай:
одна машина, одна операционка, одинаковое окружение, одни и теже библиотеки и т.д. и т.д. 
один С++ код, без "undefined behavior" и "implementation defined"
И есть два разных, строго_соответствующих_стандарту С++ компилятора. (само собой без багов)

Утверждение: Удачная компиляция+сборка на одном компиляторе
не дает никаких гарантий, что на другом компиляторе
этот же код будет компилироваться+собираться.

Вопрос: Справедливо ли по вашему это утверждение?
пожалуйста, ДА или НЕТ ?

(Без каких-то дополнительных условий.
Вопрос звучит так, как он звучит.)

Добавлено через 34 секунды
Или может голосование устрить?   smile 
но прежде всего, я хотел бы услышать ваше мнение.

PM MAIL   Вверх
mes
Дата 23.6.2013, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(volatile @  23.6.2013,  17:09 Найти цитируемый пост)
Вопрос: Справедливо ли по вашему это утверждение?
пожалуйста, ДА или НЕТ ?

да, если код  ill-formed smile при этом ill-formed код может компилироваться и работать вполне нормально, а может и нет.. 
нет, если код well-formed и компиляторы соответствуют стандарту.. 

да + нет ->  ДА 


Это сообщение отредактировал(а) mes - 23.6.2013, 21:15


--------------------
PM MAIL WWW   Вверх
mes
Дата 26.6.2013, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



volatile, я тут на досуге почесал репу,  и понял  что вам  мешает воспринимать мои доводы smile 

Цитата(volatile @  23.6.2013,  17:9 Найти цитируемый пост)
Утверждение: Удачная компиляция+сборка на одном компиляторе
не дает никаких гарантий, что на другом компиляторе
этот же код будет компилироваться+собираться.


утверждение малость вывернуто наизнанку..
удачная компиляция+сборка вообще никаких гарантий не дает. гарантии может дать только строгое соответствие кода и компилятора общему стандарту..  для того стандарты и придуманы.. 
только вот некоторые стандарты несколько расплывчаты, чтоб развязать руки производителям компиляторов, в итоге сложность соблюдения соответствия увеличивается.. 
плюс некоторым хочется понравится пользователю и они предлагают собственные расширения, иногда противоретящие основным правилам..

но в итоге:
 только well-formed код с одной стороны, и соответствующий этим правилам (не обязательно основному стандарту) компилятор с другой стороны могут гарантировать успешность предприятия  smile 

Это сообщение отредактировал(а) mes - 27.6.2013, 21:03


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | GNU toolchain | Следующая тема »


 




[ Время генерации скрипта: 0.1437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.