Я знаю, что это не стандартный C ++ и вместо этого расширение C99, которое поддерживает GCC. Документация GCC на самом деле мало что освещает мой вопрос: https://gcc.gnu.org/onlinedocs/gcc/rest ... nters.html
Говоря о c с C99): https://en.cppreference.com/w/c/language/restrict
Примечательно, что эталонная ссылка CPP Состояния: < /p>
во время каждого выполнения блока, в котором ограниченный указатель P
объявляется (обычно Каждое выполнение корпуса функции, в котором P является параметом функции
), если какой -то объект, который доступен через p
(прямо или косвенно), изменен, тогда все доступные
к этому объекту (как считывает, так и записывает) в этом блоке должен возникнуть
через P (прямо или косвенно), в противном случае поведение
не определен: < /p>
< /blockquote>
также гласит: < /p>
Назначение из одного ограниченного указателя к другому не определено
поведение, за исключением случаев, когда он назначен из указателя к объекту в некотором
наружном блоке к указателю в каком -то внутреннем блоке (включая использование аргумента ограниченного указателя
при вызове функции с ограниченным параметром
pointer) или при возвращении из функции ( И в противном случае
Когда блок оттока закончился): < /p>
< /blockquote>
Ниже я сделал некоторые код, чтобы охватить некоторые случаи, я могу Представьте себе: < /p>
Код: Выделить всё
#include
#include
class Foo {
public:
void func1(char* __restrict__ ptr1) {
// 1. Does passing ptr1 to another method break the rules of restrict?
// I don't think it does because func2 only reads in its own scope
func2(ptr1);
// func3 writes
func3(ptr1);
ptr1 += 3;
// EDITED: 4. Is this read guaranteed to see the change from func2?
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79459973/uncertainty-of-gcc-restrict-rules[/url]
Мобильная версия