Здравствуйте, rg45, Вы писали:
R>Вот так нельзя сделать исполняемый файл:
R>А вот так можно:
R>Здесь тоже два разных языка?
Ключевое слово — калькуляция. Язык нужен чтобы что-то вычислять — иначе смысла нет.
Так вот — C++ умеет вычислять в двух режимах: обычный режим в момент исполнения на компе пользователя. И второй режим вычисления — в момент компиляции.
Тот же голый С если и может что вычислять в момент сборки, то достаточно примитивные вещи — как то примитивные арифметические операции. У C++ возможности намного шире.
Ну можно еще иначе назвать: конструкции языка C++, которые поддерживают вычисления в момент компиляции. Т.е. грубо говоря то,
что можно написать внутри функции constexpr (которая используется в режиме компиляции).
#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;
}
— а конструкций не так уж много, получается. Ни выделение памяти с помощью new, ни reinterpret_cast/dynamic_cast/const_cast. Т.е. совсем другой ограниченный язык, совсем другие возможности. Ну да, во многом похож на C++.