Pull to refresh
32
0

User

Send message
кхм, по поводу второго пункта — скорее всего Вы правы. В первоначальном варианте — не было basic_json, был просто json, basic_json предложил уже я и идея, внезапно, принялась.
If no matching handler is found, the function std::terminate() is called; whether or not the stack is
unwound before this call to std::terminate() is implementation-defined (15.5.1).

Вот это поворот. Спасибо. Неожиданно. У меня шок
Вы будете смеяться, но Visual C++ Compiler Version 18.00.21005.1 выдаёт тот же результат. Воу
Конечно, придраться, при таком объяснении, есть к чему, но если рассказывать человеку, никогда не слышавшему о glvalues/xvalues/prvalues/lvalues/rvalues «на пальцах», то именно эта статья, мне кажется, проще всего. На самом деле, я скинул эту статью, ради вот этой ремарки с картинкой:
Technically these are two kinds of rvalue: expressions denoting truly abstract values are prvalues (pure), while expressions denoting short-lived objects are called xvalues (expiring) [1] §3.10.


В комментариях же, уже идёт обсуждение о неточности/некорректности концепции…
Хочу добавить ссылочку о lvalue/rvalue: The lvalue/rvalue metaphor:
A simple interpretation of the mysterious value categories of C++: lvalues represent objects and rvalues represent values.
Очень интересно, есть ссылка, где об этом можно почитать? Или только в стандарте?
Я восхищаюсь тем, как у него эта махина даже просто помещается в голове.

Ну, по признанию Страуструпа он знает язык на 7-8 из 10ти… Так что — не совсем уже помещается :)
Вы полностью правы. Посыпаю голову пеплом. Может меня не правильно поняли, но я хотел сказать, что не нужно смотреть на язык в целом, смотря лишь на то, поддерживает ли стандартная библиотека работу с HTTP или нет. И да, я полностью согласен, что наличие такой библиотеки упростило бы жизнь C++-программиста. Но тогда бы уж хотелось и полноценную работу с файловой системой, возможность работы с теми же форматами (JSON, мейнстрим сейчас)… ну и каждый может добавить свою хотелку. Но, снова же, если говорить о том, что на С++ можно писать маленькие утилитки-программки, то да — можно, но нет — лучше поискать альтернативу — тот же питон или bash.
Отдельное спасибо за вопрос на CodeGolf.StackExchange.
Нет. Вы читали комментарии выше? Я сказал «С javascript нельзя вызвать системную функцию» («каждый язык имеет свою нишу» — javascript не для вызова системных функций). Мне в ответ написали — «легко». Я попросил показать на примере
Вот здесь написано:
JavaScript does not have any facilities to interact with the OS

А здесь:
JavaScript runs in a sand-box, meaning that it cannot interfere with the user's computer

А с помощью Child Process можно запустить дочерний процесс.
Я не знаю JS, но, для общего развития, как вызвать CreateProcess(), например?
В итоге получается неравноценное соревнование: соревнуются языки, которые поддерживают работу с HTTP с C++ в целом, серьёзно? А то, что на C++ можно «эмулировать» работу любого языка, который есть в том списке — не берётся в счёт?
А теперь ответы:

Python 2: где обработка ошибок? А в остальном — да — отличная работа с HTTP.
C#: угумс, но сначала поставим .NET для Windows и что-то ещё для других платформ, где, по рассказам, реализация ещё глючная (я не говорю, что для C++ ничего не надо ставить — просто C++ это проще).
UNIX shell: оо, прям кроссплатформенное решение, вместе с использованием кроссплатформенных утилит lynx и grep. С таким же успехом на C++ можно написать утилиту show_straustrups_lonks и в одну строчку выполнить её.
PHP 5: очень смешно наблюдать, как язык который заточен под работу с web-технологиями сравнивается с С++ в возможности закачивать файлы. Но ладно, сначала поставим какой-нибудь веб-сервер, который, скорее всего, написан на С++ — где можно будет запустить скрипт (правильно я понимаю, как работает PHP ?)
Scala: нельзя придраться — функциональное программирование и всё такое. Разве что C++ поддерживает, кроме всего прочего, и функциональное программирование.
Node.js: то же самое, что и PHP — нет смысла соревноваться
Haskell: снова функциональное программирование сравнивается с императивным. Да, и ещё Haskell популярный (извините заранее, никого не хочу задеть)
CJam: «CJam does not have regex»… «Try it using the Java interpreter like java -jar cjam-0.6.2.jar file.cjam»… — Очень удобно

Просто хочу сказать, что каждый язык имеет свою нишу. И что-то, что в одном языке делается просто, то в другом — это делается или монструозно, или вообще не делается (можно ли с javascript вызвать системную функцию, например ?)
Спасибо за объяснение. У меня вопрос: то, как Вы это поняли — это результат уже опыта, или где-то прочитали, или прочитали && скомбинировали && догадались?
Воу,
too many initializers
? Какого чёрта?
Ура, Ура, Ура. Сделали перевод Страуструпа! Обсуждение на reddit:
Five Popular Myths about C++, Part 1
Five Popular Myths about C++, Part 2
Five Popular Myths about C++, Part 3
Жаль, что вывод типа сделан такой же, как и для auto. Но и auto&& нельзя особо сделать — появляется проблема со ссылками, в случае инициализации с помощью l-value. Мда…
А с C++14 есть же Lambda captures expressions:
#define prefix_safeCallVoid(objectPointer, methodWithArguments)\
[&, pointer = objectPointer]()\
{\
    if(pointer)\
        (pointer->methodWithArguments);\
}\
()
Skype под Linux — убогий, попробуйте поставить скайп под Windows — ощутите разницу:)
Может не в тему, но хочу всем посоветовать «Читаем Тьюринга» — Чарлз Петцольд — очень интересно и хорошо написано! И спасибо за статью
Я верно понимаю, что в c++14 std::max стало можно использовать в constexpr выражениях?

Да, смотрите max (3).
Почему не reinterpret_cast<T*>…

Смотрите здесь. Приведу полный текст статьи:
The C++ standard guarantees the following:

static_casting a pointer to and from void* preserves the address. That is, in the following, a, b and c all point to the same address:

int* a = new int();
void* b = static_cast<void*>(a);
int* c = static_cast<int*>(b);

reinterpret_cast only guarantees that if you cast a pointer to a different type, and then reinterpret_cast it back to the original type, you get the original value. So in the following:

int* a = new int();
void* b = reinterpret_cast<void*>(a);
int* c = reinterpret_cast<int*>(b);

a and c contain the same value, but the value of b is unspecified. (in practice it will typically contain the same address as a and c, but that’s not specified in the standard, and it may not be true on machines with more complex memory systems.

For casting to and from void*, static_cast should be preferred.

Information

Rating
Does not participate
Location
Киев, Киевская обл., Украина
Registered
Activity