小编Tav*_*nes的帖子

哪些转换应该含糊不清?

我有一些代码如下:

class bar;

class foo
{
public:
    operator bar() const;
};

class bar
{
public:
    bar(const foo& foo);
};

void baz() {
    foo f;
    bar b = f;   // [1]

    const foo f2;
    bar b2 = f2; // [2]
}
Run Code Online (Sandbox Code Playgroud)

GCC在[2]处给出错误,但不是[1].Clang给出了两个错误,显然MSVC都没有给出错误.谁是对的?

c++ conversion-operator language-lawyer overload-resolution copy-initialization

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

如何使用注释处理器检查整个源代码树?

我有很多处理特定消息类型的处理程序类.要注册所有这些处理程序,我需要知道存在哪些处理程序.目前,它们都使用特定的注释进行注释,并且我使用Java 6注释处理器来获取所有这些注释,并创建一个包含每个注释类型的实例的Register类.

如果整个树一次构建,这很有效,但如果只构建一个带注释的类(例如,当我在Eclipse中保存文件时),处理器只能看到该类型,并构建一个不完整的Register.如何检查此方案中的其他类型?

android dalvik annotation-processing

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

我该如何检查Stream <T>是否已排序?

有了Iterable<T>,很容易:

T last = null;
for (T t : iterable) {
    if (last != null && last.compareTo(t) > 0) {
        return false;
    }
    last = t;
}
return true;
Run Code Online (Sandbox Code Playgroud)

但我想不出一个干净的方法来做同样的事情Stream<T>,避免消耗所有元素,而不必.

java java-8 java-stream

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

如何将自定义Guice范围与TestNG集成?

我们使用自定义Guice范围,@TestScoped对于一些持续用于单个测试方法的JUnit测试,以及用于@Rule适当地进入和退出范围的JUnit .它看起来像这样:

public class MyJUnitTest {
    @Rule public CustomRule customRule = new CustomRule(MyModule.class);

    @Inject private Thing thing;

    @Test
    public void test1() {
        // Use "thing"
    }

    @Test
    public void test2() {
        // Assuming "Thing" is @TestScoped, we'll have a new instance
    }
}
Run Code Online (Sandbox Code Playgroud)

我们开始在其他项目中使用TestNG进行一些测试,我们希望有类似的模式.到目前为止,我们已经想出了这个:

@Listeners(CustomTestNGListener.class)
@Guice(modules = MyModule.class)
public class MyTestNGTest {
    @Inject private Provider<Thing> thingProvider;

    @Test
    public void test1() {
        Thing thing = thingProvider.get();
        // Use "thing"
    }

    @Test
    public void test2() {
        Thing thing …
Run Code Online (Sandbox Code Playgroud)

java junit testng guice

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

IEEE浮点标准是什么(+0)+( - 0)?

我是对的,对任何浮点数的任何算术运算都是由IEEE浮点标准明确定义的吗?如果是的话,只是出于好奇,那是(+0)+(-0)什么?有没有办法在实践中用C++或其他常用的编程语言来检查这些东西?

c++ floating-point ieee-754

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

如何在测试中验证Guice范围的用法?

如果某些Guice范围使用不正确,我有一些测试我想失败.例如,a @Singleton不应该有任何@RequestScoped@TestScoped依赖(Provider<>当然,s是可以的).

在生产中,这部分地得到了解决,因为在输入范围之前将构建热切的单体,从而产生OutOfScopeExceptions.但在开发过程中,单例将在范围内懒洋洋地创建,并且没有明显的问题.

从这 两个未解决的问题来看,似乎没有简单的内置方法来做到这一点.我可以使用SPI实现这一目标吗?我尝试使用a TypeListener但不清楚如何获取给定类型的依赖项.

java guice guice-3

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

有没有一种算法可以就地增加平方矩阵?

用于乘以4x4矩阵的朴素算法如下所示:

void matrix_mul(double out[4][4], double lhs[4][4], double rhs[4][4]) {
    for (int i = 0; i < 4; ++i) {
        for (int j = 0; j < 4; ++j) {
            out[i][j] = 0.0;
            for (int k = 0; k < 4; ++k) {
                out[i][j] += lhs[i][k] * rhs[k][j];
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,这个算法给出了假结果,如果out == lhsout == rhs(这里==指的是参考相等).是否有允许这些案例中的一个或两个不仅仅复制矩阵的版本?如果有必要,我很高兴为每个案例提供不同的功能.

我发现了这篇论文,但它讨论了Strassen-Winograd算法,这对我的小矩阵来说太过分了.这个问题的答案似乎表明,如果out == lhs && out == rhs(即,我们试图对矩阵进行平方),那么它就无法在适当的位置完成,但即使在那里也没有令人信服的证据或证据.

language-agnostic algorithm graphics matrix linear-algebra

10
推荐指数
2
解决办法
2726
查看次数

如果密钥以与equals不一致的方式实现Comparable,那么Java 8的HashMap是否会出错?这是一个错误吗?

我知道,自Java 8以来,如果HashMap有足够的哈希冲突,并且密钥实现Comparable,它将使用平衡树而不是bin的链表.但是,从我所看到的,Comparable接口并不需要compareTo()是"一致equals()"(虽然它强烈推荐).

我错过了什么?如果密钥碰巧具有合规但非推荐的实现,则新实现似乎允许HashMap违反Map接口的要求Comparable.

以下JUnit测试在OpenJDK 8u72上公开此行为:

import static org.junit.Assert.*;

import java.util.HashSet;
import java.util.Set;

import org.junit.Test;

class Foo
        implements Comparable<Foo> // Comment this out to fix the test case
{
    private final int bar;
    private final int baz;

    Foo(int bar, int baz) {
        this.bar = bar;
        this.baz = baz;
    }

    public boolean equals(Object obj) {
        // Note that this ignores 'baz'
        return …
Run Code Online (Sandbox Code Playgroud)

java hashmap java-8

10
推荐指数
2
解决办法
911
查看次数

是否有一个 C 代码片段可以在不使用编译器内置函数的情况下有效地计算溢出安全加法?

这是一个将int加到另一个的 C 函数,如果发生溢出则失败:

int safe_add(int *value, int delta) {
        if (*value >= 0) {
                if (delta > INT_MAX - *value) {
                        return -1;
                }
        } else {
                if (delta < INT_MIN - *value) {
                        return -1;
                }
        }

        *value += delta;
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它没有被 GCC 或 Clang优化得很好

safe_add(int*, int):
        movl    (%rdi), %eax
        testl   %eax, %eax
        js      .L2
        movl    $2147483647, %edx
        subl    %eax, %edx
        cmpl    %esi, %edx
        jl      .L6
.L4:
        addl    %esi, %eax
        movl …
Run Code Online (Sandbox Code Playgroud)

c optimization gcc integer-overflow clang

10
推荐指数
2
解决办法
498
查看次数

有没有办法判断类路径资源是文件还是目录?

例如,stream.read()假设com.google包存在于某个JAR(例如,Guava )中,此代码段会在该行上抛出NullPointerException(!).

ClassLoader classLoader = getClass().getClassLoader();
URL resource = classLoader.getResource("com/google");
InputStream stream = resource.openStream();
System.out.println(stream.toString()); // Fine -- stream is not null
stream.read(); // NPE inside FilterInputStream.read()!
Run Code Online (Sandbox Code Playgroud)

如果com/google与文件系统中的包而不是JAR交换,则代码段根本不会崩溃.事实上,它似乎读取该目录中的文件,由换行符分隔,但我无法想象在任何地方都指定了行为.

如果资源路径"com/google"指向"普通"资源文件或目录,是否有方法测试?

java classpath

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