Какие виды функций есть в C++, и как их различать?

В моем коде на С++ есть вызов функции system
system("pause")

Я хочу понять почему в одном месте вызов идет при помощи укателей, а в другом просто указав аргумент в скобках

Вот весь код
#include <cstdlib>
#include <iostream>

int main() {
    using namespace std; // Директива using

    cout << "Hello, world!" << endl;
    system("pause");

    return 0;
}


Вот что на это мне ответил Chatgpt

Функция cout из стандартной библиотеки C++ использует указатель для доступа к объекту ostream, который представляет поток вывода. Указатель используется для работы с методами и свойствами этого объекта, такими как << оператор для вывода данных.

В отличие от этого, функция system("pause") является функцией из стандартной библиотеки C, а не C++. Она выполняет системную команду "pause" для приостановки выполнения программы и ожидания нажатия клавиши пользователем. В данном случае нет необходимости использовать указатель, так как функция system просто выполняет команду и не требует доступа к объекту или передачи аргументов.

Таким образом, различие в использовании указателей в функциях cout и system связано с различиями между языками C++ и C, а также с тем, что эти функции выполняют разные задачи.


Тоесть функция system написана на С, но при этом она запускается на C++, и поэтому имеет такой синтаксис? Если да, то как это запускает комплилятор?
  • Вопрос задан
  • 244 просмотра
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист
Функция cout из стандартной библиотеки C++ использует указатель для доступа к объекту ostream, который представляет поток вывода. Указатель используется для работы с методами и свойствами этого объекта, такими как << оператор для вывода данных.

Обманул тебя ChatGPT.
cout - это не функция, а объект.
И конкретно в твоём коде указатели напрямую нигде не используются.
Ответ написан
Комментировать
@code_panik
В c++ есть бинарный оператор <<, который для целых чисел является оператором сдвига битов числа влево на заданное количество позиций (то же, что и повторное умножение на два). Например, программа напечатает 2 << 1 == 4,
#include <iostream>
using namespace std;

int main() {
    cout << "2 << 1 == " << (0b010 << 1); // 0b100
    return 0;
}

Одна из основных возможностей языка - перегрузка функций, в частности встроенных операторов (не всех). То есть мы можем определить свой тип данных со своей реализацией оператора <<.
#include <iostream>
using namespace std;

struct Foo {
    Foo& operator<<(int x) {
        cout << "Integer: " << x << '\n';
        return *this;
    }

    Foo& operator<<(const char* str) {
        cout << "String: " << str << '\n';
        return *this;
    }
};

int main() {
    Foo foo;
    foo << 3; // Integer: 3
    foo.operator<<("Hello world"); // String: Hello world
    return 0;
}

Для компилятора запись foo << 3; значит именно вызов функции foo.operator<<(3). Аналогично в случае cout, объекта типа std::ostream, который представляет поток вывода (character output).
https://en.cppreference.com/w/cpp/io/basic_ostream...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы