Compartir a través de


C28303

advertencia C28303: Para el parámetro de referencia <parameter_name> de C++, se encontró un operador ambiguo _Deref_ en <annotation>.

Esta advertencia es similar a la advertencia C28302 y se muestra cuando se utiliza un nivel adicional de _Deref_ en un parámetro.

SAL2 no requiere el uso de un nivel adicional de _Deref_ al trabajar con parámetros de referencia.Esta anotación en particular es ambigua respecto al nivel de desreferencia que se ha de anotar.Puede ser necesario utilizar _At_ para hacer referencia al objeto específico que se va a anotar.

Ejemplo

El código siguiente genera esta advertencia porque el uso de __deref_out_ecount(n) es ambiguo:

   void ref(__deref_out_ecount(n) int **&buff, int &n)

La anotación anterior se puede interpretar de cualquiera de las siguientes maneras:

  • una referencia a una matriz (de tamaño n) de punteros a enteros (interpretación SAL1)

  • una referencia a un puntero a una matriz (de tamaño n) enteros (interpretación SAL2)

Una de las siguientes puede corregir esta advertencia:

   void ref(_Out_writes_(n) int **&buff, int &n)
   // or
   _At_(*buff), _Out_writes(n)) void ref(int **&amp;buff, int &amp;n)