Информация об изменениях

Сообщение Re[7]: Вы пользуетесь constexpr? от 29.11.2024 20:17

Изменено 30.11.2024 3:28 Shmj

Re[7]: Вы пользуетесь constexpr?
Здравствуйте, so5team, Вы писали:

S>Да я вам даже больше скажу: class и struct, да что там, даже int или float -- это только и исключительно времени компиляции. Потом никаких классов и структур как run-time сущностей нет.


Есть разница когда происходит калькуляция, т.е. компьютинг — в момент компиляции на машине разработчика или в момент запуска на машине пользователя. Пример:

#include <iostream>

constexpr int fun1(int x)
{
    return 100 / x;
}

int main()
{
    constexpr int result = fun1(0);
    std::cout << "Result: " << result << std::endl;

    return 0;
}


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

А вот так:

#include <iostream>

int fun1(int x)
{
    return 100 / x;
}

int main()
{
    int result = fun1(0);
    std::cout << "Result: " << result << std::endl;

    return 0;
}


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

Разница есть?

Притом, когда попытаетесь собрать все конструкции, которые можно использовать в момент компиляции — окажется что их не так уж много. Но они самые мозгодробильные.
Re[7]: Вы пользуетесь constexpr?
Здравствуйте, so5team, Вы писали:

S>Да я вам даже больше скажу: class и struct, да что там, даже int или float -- это только и исключительно времени компиляции. Потом никаких классов и структур как run-time сущностей нет.


Есть разница где и когда происходит калькуляция, т.е. компьютинг — в момент компиляции на машине разработчика или в момент запуска на машине пользователя. Пример:

#include <iostream>

constexpr int fun1(int x)
{
    return 100 / x;
}

int main()
{
    constexpr int result = fun1(0);
    std::cout << "Result: " << result << std::endl;

    return 0;
}


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

А вот так:

#include <iostream>

int fun1(int x)
{
    return 100 / x;
}

int main()
{
    int result = fun1(0);
    std::cout << "Result: " << result << std::endl;

    return 0;
}


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

Разница есть?

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