С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
1

Манипулятор std::endl

21.02.2018, 09:44. Показов 1745. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Манипулятор std::endl - это некая глобальная функция, но почему она пишется без скобок и без параметров? Пример:

C++
1
std::cout << " ms passed" << std::endl;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2018, 09:44
Ответы с готовыми решениями:

Какого типа std::endl ? Как сделать так, чтобы функция могла принимать endl в качестве аргумента?
Что надо указать в прототипе функции, чтобы можно передавать std::endl в качестве аргумента? Уже 3...

Символ '\n' и манипулятор endl
Встретил в одной книге вот такое выражение (дословно): Если операционная система не использует...

Ошибка в std::cout<<std::endl
есть следующая задача: -создать класс множество целых чисел. перегрузить операторы для следующих...

#include <listream>. Std. Endl
#include &lt;conio.h&gt; #include &lt;lostream&gt; using std:: cout; using std:: endl; int main() ...

8
шКодер самоучка
2282 / 1958 / 945
Регистрация: 09.10.2013
Сообщений: 4,385
Записей в блоге: 3
21.02.2018, 09:52 2
Цитата Сообщение от Юрий Ч Посмотреть сообщение
почему она пишется без скобок и без параметров?

Не по теме:

Сам было ковырял, что же такое std::endl по своей сути)


Для std::basic_ostream есть перегрузка operator<<(10-12 по ссылке), принимающая "функторы"(указатели на функции либо функциональные объекты) в качестве аргумента.
Собственно std::endl является таким "функтором"
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.02.2018, 11:14 3
Цитата Сообщение от Юрий Ч Посмотреть сообщение
почему она пишется без скобок и без параметров?
потому что так красиво)
0
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 178
21.02.2018, 12:46  [ТС] 4
C++
1
   void x; // Переменная неизвестного типа
Так ещё красивее, но, почему-то, так делать нельзя.
0
Вездепух
Эксперт CЭксперт С++
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,889
21.02.2018, 12:51 5
Цитата Сообщение от Юрий Ч Посмотреть сообщение
Манипулятор std::endl - это некая глобальная функция, но почему она пишется без скобок и без параметров?
Имя обычной функции ("без скобок и параметров") - это вполне легальное выражение в языке С++ (как впрочем и в языке С). Ничего необычного в нем нет. В таком контексте оно имеет тип "указатель на функцию". Именно указатель на функцию нам тут и нужен.
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.02.2018, 14:05 6
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В таком контексте оно имеет тип "указатель на функцию". Именно указатель на функцию нам тут и нужен.
ответ не верный.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <type_traits>
#include <iostream>
 
void foo();
 
 
template<class F> void view(F&& fn) noexcept
{
    using type = decltype(fn);
    
    std::cout << "is reference? " 
        << ::std::is_reference<type>::value << '\n';
}
 
int main()
{
    view(foo);
}
Код
is reference? 1
Добавлено через 2 минуты
Цитата Сообщение от Юрий Ч Посмотреть сообщение
void x; // Переменная неизвестного типа
Так ещё красивее, но, почему-то, так делать нельзя.
зато можно так:
C++
1
2
3
4
var x; // Переменная неизвестного типа
x = true; // теперь там bool
x = "ololo"; // а теперь там char[5]
std::cout << x << '\n';
по мойму даже красивее, чем void x;
0
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,939
Записей в блоге: 1
21.02.2018, 16:11 7
Цитата Сообщение от hoggy Посмотреть сообщение
decltype(fn);
fn в любом случае ссылка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <type_traits>
 
 
void foo() {}
 
 
int main()
{
    std::cout << std::is_pointer<decltype(&foo)>::value << std::endl;
    std::cout << std::is_function<decltype(foo)>::value << std::endl;
    std::cout << std::is_reference<decltype(foo)>::value << std::endl;
    std::cout << std::is_same<decltype(foo), void(*)()>::value << std::endl;
    std::cout << std::is_same<decltype(foo), void()>::value << std::endl;
    std::cout << std::is_same<decltype(foo), void(&)()>::value << std::endl;
}
http://rextester.com/RDQIL43096
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В таком контексте оно имеет тип "указатель на функцию"
Разве не просто тип "функция возвращающая что-то, принимающая что-то", который потом преобразуется к указателю/ссылке?

Т.е. дял примера выше можно добавить:
C++
1
2
3
4
5
void bar(void(*)()) {}
void bar(void(&)()) {}
//...
bar(&foo);//&foo - строго указатель на функцию foo
bar(foo);//ошибка
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.02.2018, 18:07 8
Цитата Сообщение от Croessmah Посмотреть сообщение
fn в любом случае ссылка.
аааа!!!!



та ну вы всы равно понэли)
0
Вездепух
Эксперт CЭксперт С++
12793 / 6670 / 1795
Регистрация: 18.10.2014
Сообщений: 16,889
21.02.2018, 18:37 9
Цитата Сообщение от hoggy Посмотреть сообщение
ответ не верный.
Мимо кассы. Я специально указал, что речь идет именно об этом конкретном контексте.

Цитата Сообщение от Croessmah Посмотреть сообщение
Разве не просто тип "функция возвращающая что-то, принимающая что-то", который потом преобразуется к указателю/ссылке?
Я специально указал, что речь идет именно о поведении выражения в данном контексте, чтобы не разворачивать полную спецификацию неявной конверсии.

Однако ошибка в моем ответе есть. std::endl - это еще не функция, а лишь шаблон функции. И песня тут начинается с разрешения перегрузки и свойств operator <<...
0
21.02.2018, 18:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2018, 18:37
Помогаю со студенческими работами здесь

std::endl; и std::cout"/n"; - одно и то же?
Весь вопрос в теме.... std::endl; и std::cout&lt;&lt;&quot;/n&quot;; - одно и то же?

Показать на примере, как использовать манипулятор std::ws класса istream
Здравствуйте, уважаемые форумчане! Пожалуйста, объясните и, если можно, покажите на примере, как...

Чем отличается "\n" от std::endl?
чем они отличаются?

Есть ли в std, или где-нибудь ещё, константа для пустой строки (""), как endl (\n) для символа переноса?
Раздражает писать так: return &quot;&quot;;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru