Допустимо ли несовпадение параметров функции?

Что касается использования const Параметры функции Я слышал, что в некоторых системах OS X постоянство параметра искажается в сигнатуре функции. Например, если в заголовочном файле интерфейса есть следующее объявление:

int f(int argument);

но если бы только реализовать эту функцию:

int f(int const argument);

тогда это может привести к ошибкам компоновки в OS X (но не в Linux), потому что способ OS X манипулировать сигнатурами функций C++ включает в себя постоянство параметров.

Какое правильное поведение калечит? Есть ли в С ++ мнение по этому поводу?

1 ответ

Решение

Константные и изменчивые квалификаторы верхнего уровня следует игнорировать в целях искажения имен. Это можно определить из двух вещей в стандарте. Во-первых, подпись функции используется для искажения имени.

В стандарте C++14 раздел 1.3.17 определяет сигнатуру:

имя, список типов параметров (8.3.5) и окружающее пространство имен (если есть) [ Примечание: подписи используются в качестве основы для искажения и связывания имен. - конец примечания]

Чтобы получить определение списка типов параметров, мы затем обратимся к разделу 8.3.5/5:

Тип функции определяется с использованием следующих правил. Тип каждого параметра (включая пакеты параметров функции) определяется из его собственных decl-specier-seq и декларатора. После определения типа каждого параметра любой параметр типа "массив из T" или "функция, возвращающая T" настраивается на "указатель на T" или "указатель на функцию, возвращающую T", соответственно. После создания списка типов параметров любые cv-квалификаторы верхнего уровня, модифицирующие тип параметра, удаляются при формировании типа функции. Результирующий список преобразованных типов параметров и наличие или отсутствие многоточия или пакета параметров функции представляет собой список параметров типа функции. [Примечание: это преобразование не влияет на типы параметров. Например, int () (const int p, decltype (p)) и int () (int, const int) являются идентичными типами. - конец примечания]

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