小编nlt*_*lta的帖子

为什么这个程序不会短路?

运行 gnu awk 时出现 div/0 错误。Mawk 没有同样的错误。

\n
>>> awk \'BEGIN { print (0 && (4/0)) }\'\nawk: cmd. line:1: error: division by zero attempted\n>>> mawk \'\'BEGIN { print (0 && (4/0)) }\'\n0\n
Run Code Online (Sandbox Code Playgroud)\n

如果我在 4 周围添加括号,它的行为是相同的

\n
>>> awk "BEGIN { print (0 && ((4)/0)) }"\n0\n>>> mawk "BEGIN { print (0 && ((4)/0)) }"\n0\n
Run Code Online (Sandbox Code Playgroud)\n

这似乎并不重要。

\n

浏览posix 标准,我实际上找不到“短路”这个词,那么两者都正确吗?只是莫克?

\n

GNU awk 确实这么说

\n
\n

\xe2\x80\x98&&\xe2\x80\x99 和 \xe2\x80\x98||\xe2\x80\x99 运算符因其工作方式而被称为短路运算符。如果可以在计算过程中确定结果,则完整表达式的计算为 \xe2\x80\x9cshort-circled\xe2\x80\x9d。

\n
\n

awk logical-operators

6
推荐指数
1
解决办法
138
查看次数

为什么将 `&mut &mut i32` 转换为 `*mut *mut i32` 无效

我可以像这样在 Rust 中将 &mut i32 转换为 *mut i32

fn main() {
    let mut x = 1;
    let mut xref = &mut x;
    unsafe {
        let xref_ptr = xref as *mut i32;
        *xref_ptr = 2;
    }
    println!("{}", x);
}
Run Code Online (Sandbox Code Playgroud)

打印 2.

但我无法将 &mut &mut i32 转换为 *mut *mut i32,我不明白为什么。

fn main() {
    let mut x = 1;
    let mut xref = &mut x;
    let mut xrefref = &mut xref;
    unsafe {
        let xrefptr = xrefref as *mut (*mut i32);
        **xrefptr = …
Run Code Online (Sandbox Code Playgroud)

unsafe reference rust

2
推荐指数
1
解决办法
786
查看次数

标签 统计

awk ×1

logical-operators ×1

reference ×1

rust ×1

unsafe ×1