确定const char *变量是否是运行时的字符串文字?

时间:2018-06-05 14:50:52

标签: linux g++ c++17

我有以下内容:

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是否是运行时的字符串文字。是否可能(没有花费这么长时间,例如10ns)?我在Linux上。

提前致谢!

2 个答案:

答案 0 :(得分:1)

不,你不能以便携的方式说出来。

而且const也无济于事。在C中,例如"foo"的类型,比如char[4]类型,在某些情况下可以衰减char*指针,即使字符数组也是如此只读

答案 1 :(得分:0)

你可以使用重载,你会确定变量,但是void function(char *r)可能会收到一个文字:

可能是文字:

void function(const char* r);

当然,它不是文字:

void function(char *r);