Если Вам установили Ваши настройки клавиатуры на установку "Visual C# 2005", хорды переключения и редактирования текста окна превосходны. Вы поражаете первую комбинацию Ctrl + Ключ, затем выпускаете и поражаете следующую букву.
, которую я все еще использую F4 для показа области свойств, таким образом, я не знаю хорду для той.
, Если Вы переходите к пункту меню Tools> Customise и нажимаете кнопку Keyboard, он дает Вам список команд, которые можно искать, чтобы видеть, доступен ли ярлык, или можно выбрать "Сочетания клавиш Нажатия": текстовое поле и тестовые сочетания клавиш, которые Вы хотите присвоить, чтобы видеть, конфликтуют ли они.
Приложение: я просто нашел другого большим, что я думаю, что буду использовать вполне часто: Ctrl + K , S
открывается intellisense поле, спрашивая Вас, чем требуется окружить выделенный текст. Это точно, что мне требовались все те времена, я должен был обернуть блок в условное выражение или попытку/выгоду.
Строковый литерал не может использоваться в качестве аргумента шаблона .
Обновление: в настоящее время, спустя несколько лет после того, как этот вопрос был задан и дан ответ, можно использовать строковые литералы как аргументы шаблона. В C ++ 11 мы можем использовать пакеты символов в качестве аргументов шаблона ( template
), и возможно передать литеральную строку в такой шаблон.
Это сработает, однако:
template <char const *str>
struct X
{
const char *GetString() const
{
return str;
}
};
char global_string[] = "String";
int main()
{
X<global_string> x;
cout<<x.GetString();
}
No. Согласно Стандарту C ++ 14.3.2 / 1:
Аргумент шаблона для параметра шаблона, не являющегося типом и шаблоном, должен быть одним из:
- интегральная константа-выражение целочисленного или перечислимого типа; или
- имя нетипового параметра-шаблона; или
- адрес объекта или функции с внешней связью, включая шаблоны функций и идентификаторы шаблонов функций, но исключая нестатические члены класса, выраженный как & id-expression, где & является необязательным, если имя относится к функции или массиву, или если соответствующий параметр шаблона является ссылкой; или
- указатель на член, выраженный, как описано в разделе 5.3.1.
Строки отсутствуют в списке.
Нет, вы не можете работать со строковыми литералами во время компиляции. Лучшее, что вы можете получить, - это странные многосимвольные литералы (например, 'abcd'
), которые используют некоторые синтаксические анализаторы времени компиляции. Они упомянуты в §2.13.2.1 :
Обычный символьный литерал, который содержит более одного символа c-char. многосимвольный литерал. Мультихарактерный ter литерал имеет тип int и значение, определяемое реализацией.
В C ++ 0x могут быть способы обойти эти ограничения, хотя с новыми строковыми литералами , Arctic Interactive содержит интересную статью по этому поводу.
]Вы можете использовать адрес строки с внешней связью в качестве параметра шаблона, например:
template <const char** T> class My {
public:
void do_stuff() {
std::cout << "zzz";
}
};
const char* str;
int main()
{
My<&str> zz;
zz.do_stuff();
printf("Result: %d %d \n", 60 % 10 + 1, (60 % 10 ) + 1 );
}
C ++ не знает о строках. Он знает только о «массивах символов», и там литерал будет указателем на массив. Поэтому, если вы использовали бы «значение» вашей строки в качестве параметра шаблона, вы фактически использовали бы значение указателя.