example container clase c++ visual-studio

c++ - container - std set find



¿Por qué se puede compilar std: set(con un solo punto)? (2)

En el ámbito del bloque, un identificador seguido de dos puntos individuales introduce una etiqueta. Por lo tanto, su declaración es equivalente a:

set<string> keys;

excepto que lleva la etiqueta std y se puede saltar a la instrucción goto std; .

Por alguna razón, el set nombres es conocido por el compilador --- tal vez lo hiciste using namespace std; , o using std::set; , o algo así, o quizás definió su propio tipo de set algún lugar.

Accidentalmente escribí

std::set<string> keys;

como:

std:set<string> keys;

pero extrañamente, Visual Studio 2013 aún compila.

¿Por qué pasó esto?

En realidad, las keys no solo se definen, sino que luego se usan como un conjunto de cadenas, como

if(keys.find(keystr)==keys.end()){ keys.insert(keystr); toret.push_back(tempv); }


En el segundo caso, std es una etiqueta. Es lo mismo que la ortografía predeterminada de forma incorrecta en una declaración de caso.