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

Linux 确定const char*变量在运行时是否为字符串文字?,linux,g++,c++17,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; } intmain(){ std::字符串ss;

我有以下资料:

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;
}
intmain(){
std::字符串ss;
标准:cin>>ss;
const char*foo=“literal”;
const char*r=ss.length()>10?foo:ss.c_str();

std::cout不,你不能用便携的方式分辨


在C语言中,例如
“foo”
的类型是
char[4]
类型,在某些情况下,即使字符数组是只读的,它也会衰减为
char*
指针。

可以使用重载,但是可以确定变量,但是
无效函数(char*r)
可能会收到文字:

可能是文字:

void函数(const char*r);

当然,这不是字面意思:


void函数(char*r);

它会有什么区别?不管怎样,它都不应该被变异。@IgnacioVazquez Abrams:C中有一些情况(这是问题的标签之一)将
const char*
转换为
char*
并修改其内容是合适的。
const
属性并不意味着指向的对象是不可变的。不。你为什么要这样做呢?这个问题几乎让我大吃一惊。你真正想解决的问题是什么?@HCSF将字符串从一个进程传递到另一个进程具有最低延迟的其他进程我不知道知道知道字符串是否为字符串文字有何帮助。重写不是运行时测试,这是问题所要求的。OP不想知道函数的参数是否为文字;他们想知道它是否为变量(或其他表达式)其值是从字符串文字初始化的。由于say“foo”的类型是char[4],因此在c语言中不是true虽然C中不可能重载,但是如果它禁止C++接受编译时间,而不是运行时测试,那么这是一个有希望的答案。如果我在CCENOS 7和GCC 7上,任何不可移植的方式?不快,你需要检查编译程序的适当部分。远离低级专家的身份,但如果您可以将自己限制在具体的内核中,则可以根据
const char*
的地址猜测它在堆或堆栈上的分配时间