小编Ris*_*hal的帖子

为什么预处理器不会导致两个相邻的减号为减量?

请考虑以下代码:

#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)

这里的预处理应该按以下方式进行:

  1. 首先应该用-B替换A.
  2. 则B应被替换为这样-C表达所得成--C
  3. 然后C应该被替换为5因此表达式导致--5

因此,结果表达式应该给出编译错误(左值错误).但正确的答案是5,输出怎么能是5?

请帮帮我.

c preprocessor

12
推荐指数
3
解决办法
491
查看次数

为什么在声明多维数组时允许省略第一维,而不是其他维?

为什么没有必要提到多维数组的第一维,必须提到其他维度:

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)

我无法理解这背后的概念或逻辑.

c c++ arrays multidimensional-array

8
推荐指数
2
解决办法
773
查看次数

如果构造函数参数不是通用的,则自动类型推断如何工作

情况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)

现在自动类型推断如何在这里工作?

请帮助理解这一点.

java

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

C编译器是否为变量分配内存?

我想知道在哪个阶段,内存被分配给变量.它是在编译阶段还是在执行时?

c

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

在Comparator的比较函数中没有比较整数对象

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行,编译错误即将来临.

java

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

标签 统计

c ×3

java ×2

arrays ×1

c++ ×1

multidimensional-array ×1

preprocessor ×1