Russian Qt Forum
Май 06, 2024, 10:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Голосование
Вопрос: Какое впечатление на Вас производит этот фрагмент кода
Ужасное - 4 (33.3%)
Примитивное "С с классами" - 3 (25%)
Нормальный рабочий код - 3 (25%)
Круто - 0 (0%)
Ваш вариант - 2 (16.7%)
Всего голосов: 11

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Впечатления от фрагмента кода  (Прочитано 11644 раз)
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #15 : Август 10, 2016, 00:18 »

Почему?
Цитировать
17.6.4.3 Reserved names
If a program declares or defines a name in a context where it is reserved, other than as explicitly allowed by
this Clause, its behavior is undefined.

Цитировать
17.6.4.3.2 Global names
Certain sets of names and function signatures are always reserved to the implementation:
— Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase
letter (2.12) is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the
global namespace.

Записан
Bepec
Гость
« Ответ #16 : Август 10, 2016, 02:08 »

Вот так не знал. А есть хоть один пример такой глобальной переменной?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Август 10, 2016, 11:16 »

Автор не понимает, что такое локальные параметры (передается float t в качестве аргумента, потом этот же t меняется по коду - фууу...)
Зато автор знает что "t" - стандартное имя для аргумента/веса интерполяции

Автор не знает о существовании оператора switch (проверки типов через if).
Не вижу как здесь применить switch. А хоть бы и можно, для 3 веток и if/else совсем неплох.

это - UB.
Вряд ли для членов класса (или локальных переменных - видел и так) это чем-то грозит. Иначе бы быстро полилось "из всех щелей".

Пока не вижу ничего кроме мелочных придирок. Мне вот не нравится отсутствие пробелов до/после операторов, ну что же, человек имеет право на свой стиль. Но код имеет не только "внешний вид", но и содержание, и что-то об этом пока не услышал ни слова.

А хз что он делает. Похож на студенческий говнокод из лабы первокурсника.
...
В общем, я бы не стал его использовать.
А почему Вы полагаете что вообще есть выбор использовать "это" или "то"? Что у Вас под рукой будет что-то типа Qt вылизанное не раз и, в конце-концов, Вы уверенно раскрасите кнопку каким-нибудь делегатом?  Улыбающийся  В жизни часто бывает совсем иначе
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #18 : Август 10, 2016, 11:40 »

Перефразируя известную амерскую поговорку, "if it looks like a shit then it is a shit" Улыбающийся
Другими словами, какой смысл от использования чужого кривого кода, который непонятно, что делает? Улыбающийся

Насчет свитча - ну, там идея такая:

Код:
if (channel.type == TypeX)
{
... blabla делаем что-то для TypeX, ну это понятно
}
else if (anotherVariable <= 3)
{
... WTF?? Какой у нас тут тип канала??? Без разницы, что ли? Почему какая-то anotherVariable <= 3, что за magic numbers??
}
else
{
... WTF? А здесь какой такой "особый случай"?
}

Цитировать
"Смешались в кучу кони, люди"
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #19 : Август 10, 2016, 14:49 »

Код:
... WTF?? Какой у нас тут тип канала??? Без разницы, что ли? Почему какая-то anotherVariable <= 3, что за magic 
Если для канала чисел 3 и меньше - обрабатывать так-то. Что тут странного? Плохого? Почему нельзя использовать общее правило а надо непременно лупить свитчом по всем типам?

Перефразируя известную амерскую поговорку, "if it looks like a shit then it is a shit" Улыбающийся
Другими словами, какой смысл от использования чужого кривого кода, который непонятно, что делает? Улыбающийся
А почему кривой/говнистый? Только потому что "в нашем (UI-шном) муравейнике так не пишут!!!"?  Так это не показатель Улыбающийся

Есть "каналы" (порядка 100-200), в каждом записано значения для N кадров. Задача (всего-навсего) интeрполировать значения каналов для заданного времени t. Разумеется каналы разных типов интерполируются по-разному. Плюс еще 2 наворота: во-первых некоторые каналы могут быть неактивны (map_p), Во-вторых записанные значения могут соответствовать другим исходным данным и интерполированные значения надо преобразовать для текущих (retarget)

Начинающий конечно такое не потянет - опыта маловато. А у "более опытных" тот опыт срабатывает в минус - "фырканья" много, а толку тот же ноль. Спросишь шо такое кватернион - лупает глазками. Может он и знает много - но ничего из того что нужно.
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #20 : Август 10, 2016, 22:59 »

Вот так не знал. А есть хоть один пример такой глобальной переменной?

смысл в том, что стандарт декларирует собственную нотацию именования своих имен.
и объявляет UB (то есть последствия на совести разработчика),
если кто-то в своем коде использовал туже самую нотацию.

пример:
http://rextester.com/SZZHT85689

Код:
#include <iostream>
#include <string>

std::string _value="собственность реализации языка с++";
 
template<class HAHAHA> struct Trololo
{
    Trololo(void)
        : _value("oh lol")
        {}
    
    std::string _value;
};
 
template<class DISREGARD_THAT>
struct CMyAwesomeClass: Trololo<DISREGARD_THAT>
{
    void SetValue(const std::string& value)
        { _value = value; }
};
 
int main()
{
    CMyAwesomeClass<int> c;
    c.SetValue("ok");
    std::cout << c._value << std::endl;
}

вывод:
Цитировать
oh lol

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

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

а это уже означает, что если вы используете нотацию "реализации с++",
то у вас потенциально может возникнуть коллизия,
от которой вы никак не сможете превентивно защититься.

собственно, поэтому стандарт и объявляет посягательство на его нотацию как UB

грамотные любители подчеркиваний используют подчеркивания в конце имени,
но никак не в начале.
« Последнее редактирование: Август 10, 2016, 23:44 от _Bers » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.077 секунд. Запросов: 25.