请考虑以下代码:
#include <stdio.h>
#define A -B
#define B -C
#define C 5
int main()
{
printf("The value of A is %d\n", A);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里的预处理应该按以下方式进行:
因此,结果表达式应该给出编译错误(左值错误).但正确的答案是5,输出怎么能是5?
请帮帮我.
为什么没有必要提到多维数组的第一维,必须提到其他维度:
int A[][][2]={{{1,2},{3,4}},{{4,5},{5,6}}}; // error
int A[][2][2]={{{1,2},{3,4}},{{4,5},{5,6}}}; // OK
Run Code Online (Sandbox Code Playgroud)
我无法理解这背后的概念或逻辑.
情况1:
class Gen3<T extends Number> {
T val;
<T extends String> Gen3(String ob){
}
}
Run Code Online (Sandbox Code Playgroud)
这里编译器没有给出任何错误,但它应该给出正确的?因为这是T的两个矛盾的界限.请帮助我理解这一点.
案例2:
class Gen3<T extends Number> {
T val;
<T extends String> Gen3(String ob) {
}
}
Run Code Online (Sandbox Code Playgroud)
假设我写下面来测试上面的类
Gen<Integer> a = new Gen<>("r");
Run Code Online (Sandbox Code Playgroud)
现在自动类型推断如何在这里工作?
请帮助理解这一点.
class MyComparator<Integer> implements Comparator<Integer>
{
@Override
public int compare(Integer o1, Integer o2) {
if(o1>o2) // line no 3
return 1;
else if(o1==o2)
return 0;
else
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
在第3行,既没有取消装箱,也没有能够调用intValue().请帮助理解这一点.
在第3行,编译错误即将来临.