int main()
{
//...
thread first (...);
first.join();
return 0;
}
Хорош ли он?
И самое главное возможно ли «вживить» это дело в Вижлу? Либо же нужно что-то отдельно?
Мне не нужен полный список низкоуровневых оптимизаций, таких как размещение переменных в регистры, а нужны такие, как вычисление константных выражений или раскрытие простых методов (get/set). Какие оптимизации в C и C++ различаются? В частности, рассматриваю gcc.
gcc -Q --help=optimizers
выведет список всех включенных в настоящий момент (другими опциями командной строки) оптимизаций. Что каждый из -f* ключей означает можно посмотреть тут: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Option... Я хочу просто получить .exe файл который будет работать на компьютере! один файл в котором сраный hello worldНа C++ возможно всё, просто это такой язык, в котором за вас никто ничего не будет делать, вы несёте ответственность за каждую мелочь, за каждую опцию, и должны это всё понимать, в отличие от других языков.
Что на C++ это невозможно?
fout.write(lastname.data(), firstname.size());
size_t size = firstname.size();
fout.write(reinterpret_cast<const char *>(&size), sizeof(size));
fout.write(lastname.data(), size);
///// Защита от повторного включения
#ifndef Unit1H
#define Unit1H
///// Хедеры VCL. Причём всё это сделано так, чтобы упростить написание ценой удлинения
///// компиляции. Более громоздкий, но и более удачный вариант.
///// В H:
///// namespace Controls { class TLabel; }
///// using namespace Controls;
///// В CPP:
///// #include <Controls.hpp>
///// Вот таким образом можно (было) избавиться от каскадного подключения
///// хедера Controls. А то каждый, кто использует главной форму,
///// автоматически подключает эти хедеры.
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
///// Только от Forms.hpp избавиться таким макаром нельзя:
///// мы наследуемся от TForm.
#include <Forms.hpp>
///// Класс формы. Все формы наследуются от TForm.
class TForm1 : public TForm
{
///// Особое право доступа Borland, для совместимости с Delphi.
///// Поля и свойства published не просто public, но включаются
///// в структуру рефлексии (aka reflection или introspection)
///// и программа о них знает при выполнении.
///// Применительно к формам — published-поля доступны
///// загрузчику.
__published: // IDE-managed Components
///// Компоненты, которые мы установили на форме редактором.
TLabel *Label1;
TButton *Button1;
///// События, которые мы прописали в редакторе.
///// __fastcall — модель вызова, аналогичная Delphi.
///// Именно такая модель вызова принята в обработчиках
///// событий.
void __fastcall Button1Click(TObject *Sender);
///// Пользователь пока не прописал никаких своих
///// полей и функций.
private: // User declarations
public: // User declarations
///// Конструктор. Раз уж у формы нетривиальный конструктор —
///// по правилам Си++ его надо повторить в подклассе.
///// Снова-таки, модель вызова __fastcall: в формах Delphi
///// используются т.н. виртуальные конструкторы,
///// когда по имени класса можно создать объект этого класса.
///// Фабричный метод, только немного лучше.
///// Но это значит: у всех подчинённых классов
///// должен быть один и тот же набор параметров
///// и модель вызова.
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
///// Как известно, переменная объявляется один раз.
///// Поскольку хедер может подключаться к огромному числу CPP,
///// её объявляют как extern (она есть, но в другом месте).
///// Макрос PACKAGE раскрывается в __declspec(package),
///// чтобы эту штуку можно было собрать как пакет.
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif