Hoy tengo un problema. Estoy en la necesidad de un static función miembro, const no es un deber sino una mejor. Pero, no tuve éxito en mi empeño. ¿Alguien puede decir por qué o cómo?

  • ¿Qué sería de una const función miembro estática significa, para usted?
  • Me refiero a que una función miembro estática que nunca cambia cualquiera de sus entradas.
  • Entonces sus entradas (parámetros de la función) debe ser por valor o const-referencias.
  • Esto no afecta a los constness de los argumentos de las funciones de miembros de todos modos. No significa «hacer todo lo que const», que significa «hacer esto const».
  • estás diciendo que const debe ser añadido a los argumentos
  • Por lo que usted solicitó, sí.
  • ya, estás en lo correcto. Esto hizo que mi necesidad.
  • sería un const función miembro estática significa, para usted?» – Entiendo const aquí significa constness de this que no se utiliza para el estático llamadas, pero para mí es fácilmente podría significar «prohibir modificaciones de miembro estático de datos» y que sería útil IMO

InformationsquelleAutor prabhakaran | 2011-08-12

5 Comentarios

  1. 117

    Cuando se aplica el const calificador a una función miembro no estático, que afecta a la this puntero. Para una const calificados función miembro de la clase C, el this puntero es de tipo C const*, mientras que para una función miembro que no es const-calificado, el this puntero es de tipo C*.

    Una función miembro estática no tiene un this puntero (una función de este tipo no se llama en una determinada instancia de una clase), por lo que const calificación de una función miembro estática no tiene ningún sentido.

    • Qué significa que ‘const’ es sólo para variables como int,puntero,etc.?
    • Funciones de miembro puede ser const calificados demasiado. James menciona claramente en su respuesta.
    • La función de miembro del calificador const además, califica sólo el ‘este puntero’, no el todo. Usted puede cambiar la variable global dentro de la const miembro calificado de la función. Ahora sólo me comprobado.
    • Se me olvidó añadir esta línea a partir de las anteriores «Después de prácticamente comprobado Steve Jessop del(a continuación) comentario tengo que decir que»
    • -1 «Una función miembro estática no tiene un puntero this … así const calificación de una función miembro estática no tiene ningún sentido [de esa manera]» es verdadera en sí misma, sino que está mal como un anwer a la pregunta del «por qué». Como una respuesta asume que el significado de const tendría que ser el mismo para un miembro estático como para un no-estático. Como un ejemplo, que el pensamiento no es, considerar el significado de la static, que depende del contexto.
    • Es C const* o const C* ?
    • ¿No debería un const calificador en función miembro que hace que el «este» ser de tipo «C const *const», ya que «este» por defecto es un puntero constante?
    • ambos son idénticos. En C/C++, o si no te ponen el const clasificatorio para los más íntimos tipo a la izquierda o a la derecha no tiene ningún efecto.

  2. 20

    Estoy de acuerdo con tu pregunta, pero por desgracia, el C++ es diseñado de esa manera. Por ejemplo:

    class A {
      int i;         //<--- accessed with 'this'
      static int s;  //<---- accessed without 'this'
    public:
      static void foo ()  const //<-- imaginary const
      {}
    };

    A partir de hoy, el const se considera en el contexto de this. En una manera, es estrecho. Puede ser más amplio, mediante la aplicación de este const más allá de this puntero.

    es decir, la «propuesta» const, que también se pueden aplicar a static funciones, va a restringir el static miembros de cualquier modificación.

    En el código de ejemplo, si foo() puede ser hecho const, entonces, en esa función, A::s no puede ser modificado. No puedo ver ningún idioma efectos secundarios, si esta regla se agrega a la norma. Por el contrario, es divertido que por qué esa regla no existe!

    • Probablemente sea la misma que la razón que usted no puede const-modificar una función libre para decir «esta función no modifica ninguna de las variables globales». const se aplica a un objeto (en el caso de la const funciones de miembros de la instancia en la que se llama). Quiere hacer que se aplican a todos los miembros estáticos de la clase, me imagino que si se consideraba a todos por el comité, luego de que no fue pensado para ser lo suficientemente comunes como requisito para el apoyo.
    • El const modificador no se aplica a los métodos de miembro o de los miembros de las variables, pero a la implícita this-puntero. Desde un miembro estático método no está enlazado a un objeto que no hay this-puntero para hacer const.
  3. 0

    Sin entrar en los detalles, es porque no puede o no ser un objeto modificado por la función, por lo constante es ambigua para el compilador.

    Recordar que const mantiene los objetos constante, pero puede o no puede ser un objeto aquí para mantener constante.

    • «puede o no»? Una función miembro estática nunca tiene un this puntero. (Además de que, const no mantener a los objetos constante. Evita que un particular puntero o referencia se utiliza para modificar el objeto, pero la modificación puede realizarse a través de otro camino)
  4. 0

    Es lamentable que en C++ no lo acepta como por el diseño pero, lógicamente, hay pocos casos de uso en el que se valida bien.

    Una función que es a nivel de clase válido(estática) puede no cambiar cualquier dato estático, puede ser que sólo los datos de la consulta debe ser const.
    Puede que debe ser como

    if(Object)
        MakeThisConstant()
    else
        MakeStaticDataConstant() //Only in the scope but static data cannot be constant so may be it should in some scenarios
  5. -1

    Un ‘const función miembro’ no es
    permite modificar el objeto se llama, pero el miembro estático
    las funciones no son llamados en cualquier objeto.
    Es utilizado directamente por el operador de resolución de ámbito.
    Por lo tanto, tiene una constante de función miembro estática no tiene sentido, por lo tanto es ilegal.

Dejar respuesta

Please enter your comment!
Please enter your name here