小编Paz*_*Paz的帖子

括号内的Java泛型方法参数类型与外部括号

之间有什么区别:

static void findMax(LinkedList<? extends Number> list){...}
Run Code Online (Sandbox Code Playgroud)

和:

static <T extends Number> void findMax(LinkedList<T> list){...}
Run Code Online (Sandbox Code Playgroud)

既然两者都有效,我想知道两者之间是否有任何重大差异,建议采用哪种方法.

java generics

22
推荐指数
2
解决办法
1263
查看次数

为什么我不能在C中获得枚举的"多重定义"?

假设我有三个文件:

//m.h
const int RED = 1;
//m.h ends here

//f1.c
#include "m.h"
//f1.c ends here


//f2.c
#include "m.h"
int main() {return 0;}
//f2.c ends here
Run Code Online (Sandbox Code Playgroud)

单独编译每个将工作,但gcc -Wall f1.o f2.o -o prog将产生: multiple definition of 'RED'

现在,如果我用以下内容替换const:

//m.h
enum {RED=1} colors;
//m.h ends here
Run Code Online (Sandbox Code Playgroud)

我将能够编译progRED用作const,不会出现任何 multiple definition错误.

enum当您在不同文件中使用具有相同名称的全局变量或结构时,为什么s 的行为与可见的行为不同?

c enums

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

c中具有相同功能的两个声明

我在测试中遇到了这个问题,我仍然不明白给出的答案:

假设我写了以下代码:

#include <math.h>
#include <stdio.h>

float cos(float x){
    return 1-x*x/4;
}

int main()
{
    printf("%0f",cos(0.05f)+sin(0.05f));
}
Run Code Online (Sandbox Code Playgroud)

让我们假设cossin在数学库中声明和定义(接收和返回double),并且我试图将我的代码与数学库链接起来.

另一个假设是cos定义于math.c.

问题是:

"代码是否会成功编译/链接?如果是,将调用哪个cos函数?"

答案是:

"是的,代码将编译,我的cos将被调用".

怎么解释这种行为?这些多个定义不是同一个函数吗?

c

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

Java泛型方法的参数

我正在试图找出整个Java泛型主题.

更具体地说这个问题:

public class Node<E>{
    private E data;
    public Node(E data){
        this.data=data;
    }
    public E get(){
        return this.data;
    }
    public void set(E data){
        this.data=data;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何添加"扩展"通配符,指定set方法可以接收E 任何继承类E(在这种情况下,Node将保留参数的上传版本).

或者即使我按原样离开它也会有效吗?

(我可能会对泛型类型的不变方面感到困惑.)

谢谢!

java generics

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

为什么在c ++中重载运算符时不需要范围解析(::)?

通常,当您在类声明中声明方法并在外部定义它时,您需要指定其范围.

由于我已经读过运算符是非常常规的方法,我发现很难理解以下行为:

class A
{
public:
    A(int x)
    { this->x = x;}
    int foo();
    friend const A operator+ (const A& left,const int right);

private:
    int x;
};

const A operator+ (const A& left,const int right) //can't be A::operator+
{
    return A(left.x + right);
}

int A::foo()  // A:: is needed here
{
    return 5;
}

int main(int argc, char **argv) {
    A a(1);
    a = a + 4;
    a.operator =(a+5);
    a.foo();
}
Run Code Online (Sandbox Code Playgroud)

为什么我们不需要指定我们定义\ overloading的"operator +"?是从操作数推断出来的吗?

c++ operator-overloading

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

使用异常从深度递归返回合法?

我在OOP方法中进行了测试,并被问到以下True\False问题:

"抛出异常以便从深度递归调用返回被认为是异常机制的合法使用".

我认为这是错误的,因为它在应用程序的流程中并不是一个例外,但我的老师将其标记为真,说这是从深度递归返回的快速方法.

在我看来,它类似于在处理IndexOutofBounds时使用try\catch包装for块,这是不正确的编码.

你觉得哪个是对的?

java recursion exception

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

堆栈(内存段)是否总是连续保存变量?

假设我正在编写一个C程序,它具有:

int a = 1;
int b = 5;
int *p = &a;
Run Code Online (Sandbox Code Playgroud)

将:

int k = *(p+1);
Run Code Online (Sandbox Code Playgroud)

总是给k = 5


形式上:

这个变量'地址的"连续"属性是否依赖于堆栈实现?如果没有,是否有保证(例如&a < &b < &p)?

(这个在ubuntu上使用gcc的简单测试给出了k=5,但涉及不同类型的其他测试不起作用)

c memory-management

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