Поиск:

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


Эксперт
****


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

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



Здравствуйте.

Имеется такой код:
Код
struct A {
    static const unsigned int CCC = 20;
    int foo( unsigned int x ) {
        return std::min( x, CCC );
    }
};

А теперь самое интересное:
в gcc 4.1.2 это не линкуется - http://codepad.org/LB1506hR
в gcc 4.3.2 линкуется - http://ideone.com/q1Uik8
в gcc 4.5.2 опять не линкуется - это уже на моей машине. ссылку дать не могу.
в gcc 4.7.2 снова линкуется - http://ideone.com/rP6zIF

Вопрос:
ошибка у меня и необходимо добавить
Код
const unsigned int A::CCC = 20;

или ошибка в компиляторах, в которых не линкуется ?
И вообще, что за чехарда с компиляторами (вернее с версиями) ? Или м.б. это какая-то настройка (на ideoone она включена, а у меня и на codepad нет) ? Если да, то какая ?

Спасибо.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 3.6.2013, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(borisbn @  3.6.2013,  10:38 Найти цитируемый пост)
в gcc 4.5.2 опять не линкуется - это уже на моей машине. ссылку дать не могу.

Вы уверены в версии? (возможно еще разные версии выходили параллельно (?не знаю), то есть возможно еще год релиза нужно смотреть)

В шестой студии тоже нельзя было инициализировать стат.константы в классе.
В поздних версиях уже можно.

Почему?
Видимо в силу тумнности выражений стандарта С++, создатели компиляторов не вкурили его достаточно глубоко.  smile 
Посему старые версии такое не переваривают.

Новые же версии, (даже с ключами например -std=c++98), переваривают нормально.

Цитата(ISO/IEC 14882:2011)
9.4.2.3
If a non-volatile const static data member is of integral or enumeration type, its declaration in the class
definition can specify a brace-or-equal-initializer in which every initializer-clause that is an assignment-
expression is a constant expression (5.19).


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


Эксперт
****


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

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



> Вы уверены в версии? 
Да, вроде. Вызывал g++ -v и он выдал 4.5.2. По поводу года не скажу. Он был в поставке с Ubuntu 11.04.
Интересно то, что ошибка линковки возникает только если брать адрес (сылку) этой переменной (в моём случае это std::min). Если же использовать только как rvalue, то ошибки нет.
Я, всё-таки, склоняюсь к мнению, что тут дело в настройках компилятора...


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 4.6.2013, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(borisbn @  3.6.2013,  21:25 Найти цитируемый пост)
ошибка линковки возникает только если брать адрес (сылку) этой переменной

А..., так это не из той оперы...

Это просто оптимизация.
Если убрать оптимизацию, то и новые gcc не будут компилить.
оптимизация: -O*


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


Эксперт
****


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

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



Цитата(borisbn @  3.6.2013,  10:38 Найти цитируемый пост)
в gcc 4.5.2 опять не линкуется - это уже на моей машине. ссылку дать не могу.

Вы не привели комм строку.
В общем добавьте туда (в комм строку) одно из:
Код

-O
-O1
-O2
-O3

Скорей всего поможет... (Комилятор все-же не из прошлого века).



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


Эксперт
****


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

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



borisbn, Да я понимаю ваше молчание...
Действительно, с какого это перепуга, правильность кода (компилируемость) зависит от введения/невведения оптимизации.
Код либо правильный, либо нет. Оптимизация на это не должна никак влиять.

Очень похоже на баг gcc. (Хотя логически понять причины такого поведения можно)
Вот максимально-сокращенный код который не компилируецца у меня на gcc 4.7.0 ни при каких оптимизациях.
Но кстати, прекрасно компилицца на студии.

Код

#include <iostream>
struct A { static const int CCC = 42; };

int main () { 
   std::cout << &A::CCC << std::endl;
}

Приглашаюцца к обуждению опытные gcc-шники, зубры-линуксоиды, а также вообще знатоки приплюснутых стандартов.
Велкам...

PM MAIL   Вверх
borisbn
Дата 6.6.2013, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



volatile, не.. я не по этому молчал. Вы попросили посмотреть параметры компиляции на моей машине, а её у меня на время забрали.
А по поводу оптимизации - вроде в online-компиляторах она выключена... И да.. не должна она влиять. Единственное - м.б. есть какая-то опция, влияющая на такое поведение ?

Цитата(volatile @  6.6.2013,  11:06 Найти цитируемый пост)
Приглашаюцца к обуждению опытные gcc-шники, зубры-линуксоиды, а также вообще знатоки приплюснутых стандартов.
Велкам...

Поддерживаю. Ждёмс.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 9.6.2013, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(volatile @  6.6.2013,  10:06 Найти цитируемый пост)
 &A::CCC


Цитата(volatile @  6.6.2013,  10:06 Найти цитируемый пост)
Очень похоже на баг gcc. (Хотя логически понять причины такого поведения можно)
Вот максимально-сокращенный код который не компилируецца у меня на gcc 4.7.0 ни при каких оптимизациях.
Но кстати, прекрасно компилицца на студии.


  smile, может все таки у студии баг (именнуемый в народе фичей) ?  smile


Цитата

9.4.2 Static data members
4. 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 (5.19). In that case, the member can appear in integral constant expressions. The member shall still be defined in a namespace scope if it is used in the program and the namespace scope definition shall not contain an initializer.


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


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


Эксперт
****


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

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



Цитата(mes @  9.6.2013,  12:39 Найти цитируемый пост)
9.4.2 Static data members
4. 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 (5.19). In that case, the member can appear in integral constant expressions. The member shall still be defined in a namespace scope if it is used in the program and the namespace scope definition shall not contain an initializer.


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

Сам факт что компилируемость кода зависит от оптимизации, уже достаточно стрёмен, не находите ? 



Это сообщение отредактировал(а) volatile - 9.6.2013, 23:26
PM MAIL   Вверх
mes
Дата 13.6.2013, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(volatile @  9.6.2013,  22:25 Найти цитируемый пост)
здесь говорицца для случая когда нет инициализации в описании класса. 

как по мне, так тут как раз таки грицца о случае, когда она есть при декларации внутри класса, и ее отсутвии вне класса..   smile 

Цитата(volatile @  9.6.2013,  22:25 Найти цитируемый пост)
что компилируемость кода зависит от оптимизации, уже достаточно стрёмен, не находите ? 

да, это баг.. приведенный последний пример не должен компи линковаться ни при каких оптимизациях.. за исключением случая, когда факт использования взятия адреса с'оптимизирован  smile  : smile 


Цитата(volatile @  9.6.2013,  22:25 Найти цитируемый пост)
давайте оставим студию, раз вас так она раздражает.

ни капли не раздражает, просто у них свой взгляд на вещи и ориентироваться по ней на стандартность поведения "рискованно"  smile 

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


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


Эксперт
****


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

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



Цитата(mes @  13.6.2013,  19:44 Найти цитируемый пост)
да, это баг.. 

ну слава богу  smile 

остальное весьма спорно.


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


Эксперт
****


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

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



smile 
Да и кстати, в окончательном варианте стандарта 2011, вашей цитаты, вообще нет (по крайне мере в данном пункте, и ближайших окрестностях).  smile 

Цитата(mes @  9.6.2013,  12:39 Найти цитируемый пост)
9.4.2 Static data members
4. 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 (5.19). In that case, the member can appear in integral constant expressions. The member shall still be defined in a namespace scope if it is used in the program and the namespace scope definition shall not contain an initializer.

Дальше идёт про другое...

Так что спорить о переводе не известно откуда взятой фразы, не имеет смысла.

Добавлено @ 00:27
user posted image

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


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


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

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



Цитата(volatile @  13.6.2013,  23:19 Найти цитируемый пост)
в окончательном варианте стандарта 2011, вашей фразы, вообще нет 

Цитата(volatile @  13.6.2013,  23:19 Найти цитируемый пост)
 не известно откуда взятой фразы,

ну так с более 10ка лет был актуален другой стандарт, в котором эта фраза была актуальна..  smile 


Цитата(volatile @  13.6.2013,  23:19 Найти цитируемый пост)
Добавлено через 7 минут и 38 секунд

ну и ?? обратили внимание на constexpr specifier ? и гдепродолжение цитаты, которое описывает приведенный Вами случай ? пару строчек ниже :
Цитата

The member shall still be defined in a namespace scope if it is used in the program and the namespace scope definition shall not contain an initializer.


Добавлено @ 01:02
Цитата(volatile @  13.6.2013,  22:23 Найти цитируемый пост)
ну слава богу
остальное весьма спорно

если внимательно прочитали цитату, то
Цитата

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

 в общем случае сомнительно считать багом, если линкуется потому, что оптимизатор выкинул ненужные связи..   smile 

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


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


Эксперт
****


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

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



Цитата(mes @  14.6.2013,  00:52 Найти цитируемый пост)
обратили внимание на constexpr specifier ? и гдепродолжение цитаты, которое описывает приведенный Вами случай ? пару строчек ниже :
Цитата
The member shall still be defined in a namespace scope if it is used in the program and the namespace scope definition shall not contain an initializer.


mes, Ну хорошо, давайте предположим на миг что ваша трактовка верна, 
В вашей цитате ведь говорицца вообще о "статической константе" как таковой.
Там нет ни слова ни о взятии адреса, ни о чем либо подобном.
Что означает (если трактовать по вашему), абсолютно правильный компилятор вообще не должен принимать 
статическую константу, без отдельного определения ее где-то в *.cpp
Не только взятие адреса (о котором, повторяю нет ни слова), но и именно саму константу!
Именно так ваша трактовка и звучит. Не больше и не меньше.
Но gcc, вашей трактовке не соответствует, даже с ключом -pedantic. (тестовый код элементарен, не привожу)
Более того, вашей трактовке, не соответствует ни один известный мне компилятор.  smile 
Так что смысла продолжать дисскуссию не вижу.

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


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


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

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



Цитата(volatile @  15.6.2013,  02:34 Найти цитируемый пост)
давайте предположим на миг

давайте хоть на миг )

Цитата(volatile @  15.6.2013,  02:34 Найти цитируемый пост)
В вашей цитате ведь говорицца вообще о "статической константе" как таковой.

не совсем, в середине цитате говорится еще об использовании константного выражения ассоциированного с константой  smile 
Цитата

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


Цитата(volatile @  15.6.2013,  02:34 Найти цитируемый пост)
Что означает (если трактовать по вашему), абсолютно правильный компилятор вообще не должен принимать 

нет, Вы не правильно трактуете мою трактовку.. так упустили то самое предложение из середины цитаты.. и не обратили почему же стоит "still" и "if" в последнем предложении, которые явно намекают, что должна быть еще одна ситуация..

Цитата(volatile @  15.6.2013,  02:34 Найти цитируемый пост)
Не только взятие адреса (о котором, повторяю нет ни слова), но и именно саму константу!

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

Цитата(volatile @  15.6.2013,  02:34 Найти цитируемый пост)
Именно так ваша трактовка и звучит. Не больше и не меньше.

именно так Вы хотите ее воспринимать.. 

Цитата(volatile @  15.6.2013,  02:34 Найти цитируемый пост)
Но gcc, вашей трактовке не соответствует, 

не моей ))

Цитата(volatile @  15.6.2013,  02:34 Найти цитируемый пост)
Так что смысла продолжать дисскуссию не вижу.

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


--------------------
PM MAIL WWW   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | GNU toolchain | Следующая тема »


 




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


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

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