Довольно быстрый мог бы быть чем-то вроде этого:
int IntPow(int x, uint pow)
{
int ret = 1;
while ( pow != 0 )
{
if ( (pow & 1) == 1 )
ret *= x;
x *= x;
pow >>= 1;
}
return ret;
}
Примечание, что это не позволяет отрицательные полномочия. Я оставлю это как осуществление Вам.:)
Добавленный: Ах да, почти забыл - также добавляют проверку переполнения/потери значимости, или Вы могли бы быть в для нескольких противных неожиданностей в будущем.
Я не вижу, как эти два использования могут быть одинаковыми в компиляторе.
Я думаю, что причиной двойного использования является просто тот факт, что ключевое слово очень хорошо подходит для обеих целей и нет опасности двусмысленности (одно является директивным, другое - оператором, поэтому они появляются в совершенно ином контексте ). Я думаю, что это прекрасно - язык должен иметь небольшое количество ключевых слов, и их использование должно быть легким для понимания - так обстоит дело в обоих случаях использования using
.
Как упомянул Linkgorn в комментарии, еще одним примером такой же ситуации является where
, который также существует в двух местах (общие ограничения и синтаксис запроса LINQ).