Вероятно, есть поиск в Google, который ответит на этот вопрос, но, судя по жизни, я не могу вспомнить ни одного, который не получил бы миллионы несвязанных ответов.
Итак,
В MSVC текст внутри кавычек "как этот" взят, я думаю, как std :: string или, может быть, std :: string &. В g ++ / gcc это всегда выглядит как const char *. Правда?
Я нашел фрагмент кода, с которым хотел поиграть, и он содержит
if(NULL == key)
throw exception("Empty key");
прекрасно компилируется в MSVC / VC ++ (2008 (но когда я пробую это на g ++ (4.4.3), я получаю
)
no matching functions for calls to std::exception::exception(const char&)
Я получил это на работу:
if (NULL == key)
{
std::string estr ("Empty key");
throw exception("Empty key");
}
Но это просто ужасно.
Это привело меня к другим ошибкам:
std::string estr ("");
if (NULL == key)
{
estr = "Empty key";
throw exception("Empty key");
}
Понятия не имею, что исключение () ожидает в качестве входных данных. Я нашел что-то, что предлагало бы std :: string или, может быть, std :: string &, но я потерял эту страницу, и миллионы бесполезных страниц, которые я нашел с тех пор, ну, в общем, бесполезны. Иметь все виды информации о классе исключений, использовании исключений, ....
Если не считать моего уродливого исправления, есть ли простой способ сказать g ++, что "это std :: string", а не const char &, и при этом поддерживать VC ++ счастливым? (очевидно, я пытаюсь сделать кросс-компилируемый код из одного источника.)
И в этом отношении, как ID
throw exception("Empty key");
отличается от
throw "Empty key";
Спасибо
Wes