utilizadas una tipos son sintaxis significado reservadas reglas palabras ortograficas nombres modificador lenguaje las gramaticales gramatical español espacio errores error ejemplo declarar cuáles con clase c++ c++11 const

c++ - una - ¿`const auto` tiene algún significado?



sintaxis de una clase c++ (4)

Considera que tienes dos plantillas:

template<class U> void f1( U& u ); // 1 template<class U> void f2( const U& u ); // 2

auto deducirá el tipo y la variable tendrá el mismo tipo que el parámetro u (como en el caso // 1 ), const auto hará que la variable tenga el mismo tipo que el parámetro u tiene en el caso // 2 . Entonces const auto solo fuerza const qualifier.

Creo que la pregunta es lo suficientemente clara. ¿La palabra clave automática detectará automáticamente const-ness, o siempre devolverá un tipo no const, incluso si hay, por ejemplo. dos versiones de una función (una que devuelve const y la otra que no).

Solo para el registro, sí uso const auto end = some_container.end() antes de mis for-loops, pero no sé si esto es necesario o incluso diferente del auto normal.


El compilador deduce el tipo para el autocalificador. Si un tipo deducido es some_type , const auto se convertirá en const some_type . Sin embargo, un buen compilador examinará todo el alcance de auto variable auto y encontrará si el valor de la misma cambia en cualquier lugar. Si no, el compilador deducirá un tipo como este: auto -> const some_type . Intenté esto en Visual Studio Express 2012 y el código de máquina producido es el mismo en ambos casos, no estoy seguro de que todos y cada uno de los compiladores lo hagan. Sin embargo, es una buena práctica usar const auto por tres razones:

  • Previniendo los errores de codificación. Tu intención es que esta variable no cambie, pero de alguna manera en algún lugar de su alcance, se cambia.
  • La legibilidad del código se mejora.
  • Usted ayuda al compilador si por alguna razón no deduce const para auto .

Tal vez estés confundiendo const_iterator y const iterator const_iterator . El primero itera sobre los elementos const, el segundo no puede iterar en absoluto porque no puede usar los operators ++ y - en él.

Tenga en cuenta que muy rara vez iterar desde el container.end() . Usualmente usarás:

const auto end = container.end(); for (auto i = container.begin(); i != end; ++i) { ... }


const auto x = expr;

difiere de

auto x = expr;

como

const X x = expr;

difiere de

X x = expr;

Así que use const auto y const auto& mucho, tal como lo haría si no tuviera auto .

La resolución de sobrecarga no se ve afectada por el tipo de retorno: const o no const en lvalue x no afecta a qué funciones se llaman en expr .