Ответы пользователя по тегу C++
  • Что начать разрабатывать на c++?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    За основу брать Qt, отличный фреймворк и много всего готового в нём есть
    Ответ написан
    Комментировать
  • Массивы char в c++?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Потому что в C++ нет variable length array
    Ответ написан
    Комментировать
  • Как получить количество букв в строке?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    перебрать посимвольно и посчитать, какие символы - буквы
    www.cplusplus.com/reference/locale/isalpha
    Ответ написан
    Комментировать
  • Как выйти из нескольких вложенных циклов?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Вынести в функцию, которая ищет то, что тебе надо и возвращает в виде результата, типа такого:
    /* looks for some indices */
    std::pair<size_t, size_t> findSomething(/* some parameters */) {
    // ...
      return value;
    // ...
    }
    // ...
    auto result = findSomething(/* some arguments */);
    std::cout << "[" << << result.first << ", " << result.second << "]" << std::endl;
    Ответ написан
    Комментировать
  • Что может заменить c++?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Какие языки есть которые могут работать с графикой

    В C++ нет средств для работы с графикой, а взаимодействовать с графическими апи можно практически с любого языка.
    и такие же мощные как и c++ и Java.

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

    Так нужно полегче или чтоб был заменой C++(мог решать те же задачи)?
    Не языки из семейства с.А именно отдельные.

    Смотря что ты относишь к семейству C.

    Сформулируй сначала задачу, которую хочешь решать и задавай вопрос так: "Какой ЯП лучше подходит для этой задачи?"
    Ответ написан
    Комментировать
  • Как транслировать программу на языке C или C++ в программу на языке ассемблера MASM/TASM?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Мне препод дал задание, я его сделал, но надо на ассемблере.

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

    Если всё ещё осталось желание, ищи инструкцию для любого компилятора, для gcc так:
    g++ main.cpp -S
    или так с intel синтаксисом:
    g++ main.cpp -S -masm=intel

    Можно даже не скачивать ничего https://godbolt.org/
    Ответ написан
    Комментировать
  • Как сделать программу нагружающую компьютер?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Грузит цпу
    #include <thread>
    #include <vector>
    
    
    int main() {
        std::vector<std::thread> threads;
    
        for (size_t i = 0; i < std::thread::hardware_concurrency(); ++i) {
            threads.push_back(std::thread([]() {
                int i;
                while (true) {
                    ++i;
                }
            }));
        }
    
        for (auto& thread : threads)
            thread.join();
    }
    Ответ написан
    Комментировать
  • Как изучить C++?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Просто начни писать код
    maxresdefault.jpg
    Ответ написан
    Комментировать
  • Ошибка при выполнении программы, как ее исправить?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    sizeof(s)

    если нужен размер строки, то s.size()
    Ответ написан
    Комментировать
  • Отличие динамической проверки типов от статической?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    я возможно не так задал вопрос. хотелось бы узнать, почему компилятор не может все проверить на этапе компиляции. зачем еще добавлять динамическую проверку?

    class Object {
    public:
    virtual ~Object() {}
    };
    class Weapon : public Object {
    public:
    virtual ~Weapon() {}
    };
    class Player : public Object {
    public:
    virtual ~Player() {}
    };
    
    void handleObject(Object* object) {
      // What is object? Is it weapon or player?
    };
    
    // ....
    
    Object* object = rand() % 100 > 50 ? new Weapon() : new Player();
    handleObject(object);
    Ответ написан
    1 комментарий
  • Один двумерный или два одномерных массива?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Массив структур, если это не для обучения, то скорее всего лучшим выбором будет std::vector, он сам будет следить за памятью и расширяться при необходимости. Худший вариант - второй, где указатель на указатель, т.к. кеширование процессора не будет столь эффективным
    Ответ написан
    Комментировать
  • Сколько можно зарабатывать на C++ в 14 лет?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    иди на сайты, где нужно решать задачки для ленивых студентов.
    Ответ написан
    2 комментария
  • Похожи ли Яп-ы PHP и C / C++?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Похожи ли Яп-ы PHP и C / C++?

    разве что только скобочками
    И если я познаю все эти принципы ООП, не будут ли они мне потом не давать нормально позвать принципы языка Си?

    Если я научусь использовать дрель, не помешает ли это мне потом изучить шуруповёрт?
    Ответ написан
    Комментировать
  • Как вычислить функцию rand()?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    inline int getRandomNumber(int start, int end) {
    	return start + rand() % (end - start);
    }

    допустим для getRandomNumber(10, 20);
    rand() генерит числом до RAND_MAX,
    % (end - start) "обрезает"(остаток от деления) до 10, т.е. 555 % 10 = 5
    start + сдвигает на 10

    Но лучше не использовать rand, а использовать современные решения https://stackoverflow.com/a/7560564/7458932
    Если вы не в курсе, то у rand очень плохой псевдорандом и для серьёзных целей есть целый отдельный хедер с кучей других генераторов

    и для double https://stackoverflow.com/a/9324796/7458932
    Ответ написан
    Комментировать
  • Как составить план обучения по C++?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Лучше пиши код, теория это конечно хорошо и нужно, но без практики бесполезно.
    Ответ написан
    Комментировать
  • Как обнаружить утечку памяти?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    valgrind
    Ответ написан
  • Перегрузка [] на запись В C++?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    #include <iostream>
    
    template <typename T, size_t N>
    class TestArray {
    public:
    	T& operator[](size_t i) {
    		return data[i];
    	}
    private:
    	T data[N];
    };
    
    int main() {
    	TestArray<int, 10> arr;
    	arr[0] = 99;
    	arr[1] = -1;
    	std::cout << arr[0] << std::endl;
    	std::cout << arr[1] << std::endl;
    	return 0;
    }
    Ответ написан
    Комментировать
  • Какую книгу по C++ стоит прочитать новичку?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Читал "Стивет Прата - Язык программирования C++. Лекции и упражнения"
    Ответ написан
    Комментировать
  • Почему игровые движки пишут на C++?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Почему ни один из этих движков не написан на Java или Python?

    Java и тем более Python дают ооочень большой оверхед, да безусловно можно написать на них движок, но он будет не такой производительный. Также в отличии от большинства языков(включая Java и Python) C++ позволяет выжимать максимум производительности, в джаве сборщик мусора, там нельзя размещать объекты на стеке, там размер переменной привязан к виртуальной среде, а не к машине, на которой исполняется программа, куча проверок вроде выхода за границы массива, которые дают оверхед и в конце концов, джава использует виртуальную машину. AFAIR, в джаве даже нет аналога вектора, где элементы(а не ссылки на них) будут храниться последовательно в памяти и также нельзя включить один объект в другой не по ссылке, а в C++ можно.
    Ответ написан
    Комментировать
  • Как понять, где ссылка и где копия?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    На стеке создаётся область, куда копируется значение, например тут:
    void doSomething(Type obj);
    Объект при передаче будет скопирован, т.е. выделится память на стеке(сдвинется указатель стека) и вызовется конструктор копирования, а после при выходе из функции деструктор
    void doSomething(Type &obj);
    копирования не произойдёт, т.к. передастся адрес, вообще стандарт не гарантирует, как именно реализованы ссылки но обычно как указатели. Т.е. можно думать о ссылке как об указателе с синтаксическим сахаром.
    как можно вернуть псевдоним (ссылку) на тип, который размещается не в управляемой куче и вообще почему на него можно создать указатель

    а почему нет? Если речь про стек, то создать то можно, другой вопрос, что указывать после выхода из функции он будет на мусор
    Type& doSomething(Type& obj) {
    	Type anotherObj = obj;
    	return anotherObj;
    }
    int main() {
            // .... 
    	Type &obj = doSomething(something);
    	// здесь при работе c obj будет UB
            // .... 
    }
    Ответ написан
    Комментировать