Определите, является ли переменная const char * строковым литералом во время выполнения? - PullRequest
0 голосов
/ 05 июня 2018

У меня есть следующее:

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.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вы можете использовать перегрузку, вы будете уверены в переменных, однако void function(char *r) может получить литерал:

Может быть литералом:

void function(const char* r);

Определенно, это не литерал:

void function(char *r);

0 голосов
/ 05 июня 2018

Нет, вы не можете сказать портативным способом.

И const тоже не помогает.Например, в C тип "foo", скажем, тип char[4], который может затухать до указателя char* в определенных ситуациях, даже если массив символов только для чтения.

...