C код все еще считается C++?

Постоянный запрос используется для улучшения производительности сети GraphQL за счет уменьшения размера запроса.

Вместо того, чтобы отправлять полный запрос, который может быть очень длинным, вы отправляете хеш на сервер GraphQL, который будет извлекать полный запрос из хранилища значения ключа, используя хеш в качестве ключа.

Хранилище значений ключей может быть memcached, redis и т. Д.

Сервер Apollo поставляется с автоматическими постоянными запросами из коробки. Я рекомендовал дает попробовать. Они опубликовали блог об этом. https://blog.apollographql.com/automatic-persisted-queries-and-cdn-caching-with-apollo-server-2-0-bf42b3a313de

Если вы хотите построить ваше собственное решение, вы можете использовать этот пакет для хеширования самостоятельно https://www.npmjs.com/package/hash.js

10
задан Community 23 May 2017 в 12:04
поделиться

8 ответов

В целом да код C считают кодом C++.

Но C не является собственным подмножеством в строгом смысле. Существует несколько исключений.

Вот некоторые допустимые вещи в C, которые не допустимы в C++:

int *new;//<-- new is not a keyword in C
char *p = malloc(1024); //void * to char* without cast 

Также существует больше примеров, но Вы получаете идею.

Я ранее записал более обширный ответ в подобном вопросе здесь.

27
ответ дан 3 December 2019 в 13:16
поделиться

Также обратите внимание, что C99 добавляет несколько опций, которые не разрешены в C++ (или только поддерживаются с помощью расширений поставщика), такой как встроенный _Complex и _Imaginary типы данных, массивы переменной длины (массивы измерили в а не время компиляции во время выполнения), участники массива с переменными границами (массивы, объявленные как последний член структуры, которая может содержать неуказанное число элементов), и т.д.

Для исчерпывающего списка несовместимостей между C и C++, включая изменения с C99, см. http://david.tribble.com/text/cdiffs.htm.

12
ответ дан 3 December 2019 в 13:16
поделиться

Еще много:

C позволяет рекурсивные вызовы основного, C++ не делает

char foo[3] = "abc" легальный C, не C++

sizeof('A') == sizeof(int) верно в C и лжи в C++

Существует еще больше изменений с C99

Править: Я нашел сообщение, которое перечисляет большинство различий. http://c-faq.com/misc/cplusplus.nr.html

Сводка того, почему C не является собственным подмножеством C++:

  1. автоматическое преобразование из void * к любому объектному/неполному типу
  2. новые ключевые слова (много они)
  3. из-за structs становление ограниченным по объему
  4. из-за struct становление тегов typedefs
  5. из-за требуемых прототипов
  6. неявный int правила
  7. Рекурсивный вызов main
  8. Из-за // комментарии
  9. из-за символьных литералов, являющихся типом char и нет int и т.д.
7
ответ дан 3 December 2019 в 13:16
поделиться

Одной вещью, которая отделяет два и подходит в повседневной разработке, является искажение имени функции и связь. Функция C, скомпилированная с компилятором C, не доступна для C++, если прототип не повышен с extern "C".

5
ответ дан 3 December 2019 в 13:16
поделиться

Я думаю, что это может быть более корректно, чтобы сказать, что ANSI C является подмножеством C++. Не K&R C.

1
ответ дан 3 December 2019 в 13:16
поделиться

Несколько других вещей, которые являются допустимым C, но не C++:

int func();
func(0,0); //Error in C++, but not in C

Также не недооценивайте влияние C++, имеющего больше ключевых слов:

int new;  //Obviously an error in C++
5
ответ дан 3 December 2019 в 13:16
поделиться

См. также это верный, что нет никакой потребности изучить C, потому что C++ содержит все. Существует большое общее подмножество C и C++; существует много расширений в C++, которые не находятся в C; существуют некоторые биты в C, которые не находятся в C++ (главным образом биты, которые Вы не хотите использовать); и существуют некоторые биты, которые находятся в C и C++, но отличаются.

1
ответ дан 3 December 2019 в 13:16
поделиться
typedef struct {
     int a, b, c;
} st;

st s = {
    .a = 1,
    .b = 2,
};

Это - действительный код C, который не компилирует в большинстве компиляторов C++. Это не часть спецификации C++ насколько я знаю. Однако некоторые компиляторы C++ "либеральны" с определенными частями языка и позволяют вещи, они не были должны, так же, как много пропускают несколько нюансов, которые находятся в спецификации, но почти никогда не используются.

2
ответ дан 3 December 2019 в 13:16
поделиться