小编Jos*_*ica的帖子

三元条件和赋值运算符优先级

我对直接赋值和三元条件运算符优先级感到困惑:

#include<stdio.h>
int main(void)
{
    int j, k;

    j = k = 0;
    (1 ? j : k) = 1; // first
    printf("%d %d\n", j, k);

    j = k = 0;
    1 ? j : k = 1; // second
    printf("%d %d\n", j, k);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

1 0
1 0
Run Code Online (Sandbox Code Playgroud)

但它碰巧是:

1 0
0 0
Run Code Online (Sandbox Code Playgroud)

另外我得到这个警告:

main.cpp:20:warning:语句无效

这是我评论的第二行.

由于直接赋值运算符的优先级低于三元条件运算符,因此我期望将第一行和第二行注释为等效的行.但实际情况并非如此.

我用g ++ --version(Ubuntu 4.4.3-4ubuntu5)4.4.3尝试了这个

c++ conditional-operator operator-precedence

32
推荐指数
3
解决办法
6885
查看次数

如何在整数溢出时引起异常?

如果我除以零,我会得到一个java.lang.ArithmeticException,如下例所示:

int a = 3/0;
Run Code Online (Sandbox Code Playgroud)

我想这样做,整数溢出也会导致异常.因此,以下程序将抛出异​​常而不是打印-2147483648.

public static void main(String[] args) {
    int a = Integer.MAX_VALUE + 1;
    System.out.println( a );
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用BigInteger,它不会溢出,只受可用内存的限制.

我知道我可以创建自己的add函数来检查溢出.或者我可以使用Java 8 Math.addExact.

我意识到我在15.18.2要求与JLS相反的行为

如果整数加法溢出,则结果是数学和的低阶位,如某些足够大的二进制补码格式所示.如果发生溢出,则结果的符号与两个操作数值的数学和的符号不同.

除了修改JVM的源代码和使用这样修改过的JVM之外.有没有办法来实现这个?甚至修改JVM的源代码也是不够的,因为库可能依赖于这种行为,我不希望它们受到这种影响,只有我的代码.

java exception

7
推荐指数
1
解决办法
4118
查看次数

禁用VS2010中的metagen文件生成

当我构建一个C++/CLI项目时,我得到了一个名为"proj.exe.metagen"的文件.

删除它不会影响生成的可执行文件的执行,所以我宁愿不生成它,除非有充分的理由让它存在.

如何禁用metagen文件的生成?

clr visual-studio-2010

3
推荐指数
1
解决办法
1956
查看次数