我有一个 lambda,它使用在函数范围内定义的 const char *。lambda 在函数返回后执行。
void function() {
const char * UNLOCK_RESULT = "unlockResult";
..
..
TestStep::verifyDictionary(test, [UNLOCK_RESULT](TestStep::Dictionary& dict){
return 1 == dict[UNLOCK_RESULT].toInt();
});
...
}
如果我查看 GCC 生成的程序集,保存“unlockResult”的实际字符数组是静态分配的。但我想知道这是否由标准保证,因为理论上 const char * 是函数范围。是捕获 const char * 未定义的行为,还是标准允许这样做,因为 C++ 处理 const char * 字符串时出现一些异常。
我知道我可以改变:
const char * UNLOCK_RESULT=""
to
constexpr const char * UNLOCK_RESULT=""
然后讨论就消失了,因为我什至不需要捕捉它,但我对 const char * 的情况很好奇。