这行代码失败有什么理由吗?
new Function("eval('function foo(){ alert() }'); foo()")()
Run Code Online (Sandbox Code Playgroud)
它按照预期在Chromium中弹出警报,但在Firefox中失败(foo未定义).这是一个Firefox错误,还是我的代码有问题?
考虑以下功能:
void f(int const* p)
{
*const_cast<int*>(id(p)) = 0;
}
Run Code Online (Sandbox Code Playgroud)
假设f总是得到int*一个参数,这是合法的吗?我不是在问这是不是一件好事,我只想要一个严格正式的答案.
令我担心的是,如果你能做到这一点,那么优化器在使用consts方面会有更困难的工作.考虑一个更复杂的例子:
// identity, always returns what it gets
uintptr_t id(uintptr_t p)
{
static unsigned int const ar[5] {0x12345678, 0x87654321, 0x02468ACE, 0xECA86420, 0x88888888};
for (size_t i = 0; i < 5; ++i)
p ^= ar[2*i % 5];
for (size_t i = 0; i < 5; ++i)
p ^= ar[3*i % 5];
return p;
}
void f(int const* p)
{
uintptr_t q = id(reinterpret_cast<uintptr_t>(p));
*reinterpret_cast<int*>(q) = 0; …Run Code Online (Sandbox Code Playgroud)