У меня есть следующее:
int main() { std::string ss; std::cin >> ss; const char* foo = "literal"; const char* r = ss.length() > 10 ? foo : ss.c_str(); std::cout << someMagicFunction(r) << std::endl; }
Я хотел бы определить, является ли переменная r строковым литералом во время выполнения.Возможно ли это (не занимая так много времени, например, 10 нс)?Я нахожусь на Linux.
Заранее спасибо!
Вы можете использовать перегрузку, вы будете уверены в переменных, однако void function(char *r) может получить литерал:
void function(char *r)
Может быть литералом:
void function(const char* r);
Определенно, это не литерал:
void function(char *r);
Нет, вы не можете сказать портативным способом.
И const тоже не помогает.Например, в C тип "foo", скажем, тип char[4], который может затухать до указателя char* в определенных ситуациях, даже если массив символов только для чтения.
const
"foo"
char[4]
char*