Почему std: set (с одним двоеточием) может компилироваться?

Я случайно написала

std::set<string> keys;

как:

std:set<string> keys;

но как ни странно, Visual Studio 2013 все еще компилируется.

Почему это происходит?

На самом деле keys не только определен, но позже используется в качестве набора строк, таких как

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

63

Решение

В области блока, идентификатор, за которым следует двоеточие, вводит метку. Таким образом, ваше утверждение эквивалентно:

set<string> keys;

за исключением того, что он имеет этикетку std и можно перейти к утверждению goto std;,

По какой-то причине название set известен компилятору — возможно, вы сделали using namespace std;, или же using std::set;или что-то в этом роде, или, может быть, вы определили свой set введите где-нибудь.

97

Другие решения

Во втором случае std является меткой. Это то же самое, что неправильное написание по умолчанию в регистре.

10

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector