Что делает ограничить ключевое слово, среднее в C++?

У вас есть несколько вариантов:

1) Вы можете использовать Ресурсы API . Это мой предпочтительный подход.

2) Если API Resources не ваша чашка чая, вам просто нужно как-то загрузить отношения. Один из способов сделать это - $standard->load('stream'). Другой способ - просто получить доступ к отношению: $standard->stream.

То, что здесь происходит, заключается в том, что любые доступные отношения превращают его в ключ модели relations, что делает сериализацию json по умолчанию немного непредсказуемой. В связи с этим я предпочитаю быть явным с ресурсами API.

3) Вы можете изменить массив $with модели Standard, включив в него stream, но я не фанат этого подхода, поскольку это означает, что каждый раз, когда Standard записи извлекаются, они будут автоматически извлекаться отношение stream.

with() - это метод, который вы вызываете для объекта Eloquent Builder, который извлекает отношения для Eager Загрузка . В этом случае вы работаете с экземпляром Model, а не с Eloquent Builder.

178
задан Mat 2 August 2012 в 18:18
поделиться

5 ответов

Nothing. It was added to the C99 standard.

21
ответ дан 23 November 2019 в 20:16
поделиться

Это является первоначальным предложением добавить это ключевое слово. Как уже указывалось, это особенность C99 ; это не имеет ничего общего с C ++.

10
ответ дан 23 November 2019 в 20:16
поделиться

Поскольку в заголовочных файлах некоторых библиотек C используется ключевое слово, языку C ++ придется что-то с этим делать… как минимум, игнорируя ключевое слово, поэтому нам не нужно #define ключевое слово в пустой макрос, чтобы подавить ключевое слово.

4
ответ дан 23 November 2019 в 20:16
поделиться

В своей статье Оптимизация памяти Кристер Эриксон говорит, что хотя ограничение еще не является частью стандарта C++, что оно поддерживается многими компиляторами, и он рекомендует использовать его, когда оно доступно:

Ограничение по ключевому слову

! Новинка в стандарте ANSI/ISO C 1999

! Пока еще не в стандарте C++, но поддерживается многими компиляторами C++

! Только подсказка, так что может ничего не делать и при этом соответствовать

Ограниченному указателю (или ссылке)....

! ...это, по сути, обещать компилятору, что для область действия указателя, цель указателя будет только быть доступным через этот указатель (а указатели скопированные из него).

В компиляторах C++, поддерживающих его, вероятно, он должен вести себя так же, как и в C.

См. подробности в этом посте SO: Реалистичное использование ключевого слова 'limit' в C99?

Потребовалось полчаса, чтобы пролистать статью Эриксона, это интересно и стоит того.

Редактирование

Я также обнаружил, что C/C++ компилятор IBM AIX поддерживает ключевое слово __restrict__.

g++ также, похоже, поддерживает это, так как следующая программа чисто компилируется на g++:

#include <stdio.h>

int foo(int * __restrict__ a, int * __restrict__ b) {
    return *a + *b;
}

int main(void) {
    int a = 1, b = 1, c;

    c = foo(&a, &b);

    printf("c == %d\n", c);

    return 0;
}

Я также нашел хорошую статью об использовании limit:

Demystifying The Restrict Keyword

Edit2

Я наткнулся на статью, в которой специально обсуждается использование ограничений в программах на Си++:

Load-hit-stores и ключевое слово __restrict

Также, Microsoft Visual C++ поддерживает ключевое слово __restrict.

138
ответ дан 23 November 2019 в 20:16
поделиться

В языке Си++ такого ключевого слова нет. Список ключевых слов языка Си++ можно найти в разделе 2.11/1 стандарта языка Си++. restriction - ключевое слово в C99 версии языка Си, а не в C++.

.
5
ответ дан 23 November 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: