Является ли ref const X таким же, как const ref X в D?

Совсем недавно здесь обсуждалось, как странно const находится в D с точки зрения размещения (справа или слева от имени функции и т. д.).

Интересно, если ref const X такой же как const ref X в параметре функции?

обе версии компилируются в моем тестовом проекте, но мне нужно подтверждение

1 ответ

Решение

Порядок имеет значение, только если вам нужно использовать Parens.

void foo(ref const int* x) {...}

такой же как

void foo(const ref int* x) {...}

Однако, если вы хотите const(int)*тогда вам придется сделать

void foo(ref const(int)* x) {...}

потому что тогда нет возможности поставить ref справа от const с паренс там.

Единственный случай, когда мне известно, где порядок атрибутов имеет значение для параметра, других жанров переменных или возвращаемого типа, если это не проблема синтаксиса, - это auto ref, так как auto ref по сути, это атрибут, состоящий из двух слов, а не двух отдельных атрибутов, оба влияющих на символ. Во всех остальных случаях порядок не должен иметь значения. И порядок не имеет значения и для атрибутов функции. Это всего лишь левая сторона против правой части бита сигнатуры функции, это проблема упорядочения.

Другие вопросы по тегам