标签: void

List <Void>的目的是什么?

我甚至都不知道这是可行的,但我在网上浏览了一些带有如下签名的方法:

public List<Void> read( ... )
Run Code Online (Sandbox Code Playgroud)

... 什么?有没有理由这样做?这List甚至可以举办什么?据我所知,实例化一个Void对象是不可能的.

java generics list void

36
推荐指数
3
解决办法
3917
查看次数

shared_ptr &lt;void&gt;如何知道要使用哪个析构函数?

我编写了以下代码,以查看a shared_ptr<void>作为最后引用a shared_ptr<Thing>并被销毁时的行为。

#include <iostream>
#include <string>
#include <memory>

using namespace std;

struct Thing{
    ~Thing(){
        cout<<"Destroyed\n";
    }
    int data;
};

int main(){
    {
        shared_ptr<void> voidPtr;
        {
            shared_ptr<Thing> thingPtr = make_shared<Thing>();
            voidPtr = thingPtr;
        }
        cout<<"thingPtr is dead\n";
    }
    cout<<"voidPtr is dead\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

哪个输出:

thingPtr is dead
Destroyed
voidPtr is dead
Run Code Online (Sandbox Code Playgroud)

它以我喜欢的方式运行,但是这完全是出乎意料的,我想了解这里发生了什么。最初的共享指针不再存在,最后只是一个shared_ptr<void>。因此,我希望这个共享指针的行为就像它持有a void*并且不知道有关Thing::~Thing(),但是它称之为。这是设计使然吧?void共享指针如何做到这一点?

c++ void shared-ptr

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

C中的int main()vs void main()

在C中,我知道int main()返回一个int,其中void main()没有.除此之外,他们之间有区别吗?第一个好于第二个?

c int program-entry-point void

33
推荐指数
2
解决办法
13万
查看次数

如何返回属性的默认值?

我有一个myobject可能会返回的对象None.如果返回None,则不会返回属性id:

a = myobject.id
Run Code Online (Sandbox Code Playgroud)

所以当myobject是None,上面的结果导致AttributeError:

AttributeError: 'NoneType' object has no attribute 'id'
Run Code Online (Sandbox Code Playgroud)

如果myobject是None,那么我想a等于None.如何在一行语句中避免此异常,例如:

a = default(myobject.id, None)
Run Code Online (Sandbox Code Playgroud)

python reflection attributes default void

33
推荐指数
3
解决办法
3万
查看次数

返回类型为 void 的 switch 表达式

当 switch 分支调用具有 void 返回类型的方法时,有没有办法强制对所有枚举值进行彻底检查?仅仅为了诱使编译器要求穷举而对产量进行硬编码是非常丑陋的。

这是我当前的模式(句柄方法具有 void 返回类型)

int unused = switch (event.getEventType()) {
    case ORDER   -> { handle((OrderEvent) event); yield 0; }
    case INVOICE -> { handle((InvoiceEvent) event); yield 0; }
    case PAYMENT -> { handle((PaymentEvent) event); yield 0; }
};
Run Code Online (Sandbox Code Playgroud)

我想使用表达式的原因是在添加新枚举值但未处理时出现编译错误。

java void switch-statement switch-expression java-16

30
推荐指数
3
解决办法
1625
查看次数

如何使用Junit测试工具测试void方法?

我碰巧实现了一个void followlink(obj page,obj link)简单地添加页面和链接到队列的方法.我试图测试这种方法是不成功的.

我想要的是测试队列中包含从followlink方法收到的页面和链接.我的测试类已经扩展了TestCase.那么测试这种方法的最佳方法是什么?

java junit unit-testing void

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

无法在AsyncTask中将Object []强制转换为Void []

我在扩展的asynctask中得到了这个错误,但我确定Object []是一个Void [].

这是我的自定义AsyncTask:

public abstract class RepeatableAsyncTask<A, B, C> extends AsyncTask<A, B, C> {
private static final String TAG = "RepeatableAsyncTask";
public static final int DEFAULT_MAX_RETRY = 5;

private int mMaxRetries = DEFAULT_MAX_RETRY;
private Exception mException = null;

/**
 * Default constructor
 */
public RepeatableAsyncTask() {
    super();
}

/**
 * Constructs an AsyncTask that will repeate itself for max Retries
 * @param retries Max Retries.
 */
public RepeatableAsyncTask(int retries) {
    super();
    mMaxRetries = retries;
}

/**
 * Will be …
Run Code Online (Sandbox Code Playgroud)

java android void

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

铸造到'void'真的有什么作用?

经常使用的语句(void)x;允许禁止有关未使用变量的警告x.但是如果我尝试编译以下内容,我会得到一些我不太了解的结果:

int main()
{
    int x;
    (short)x;
    (void)x;
    (int)x;
}
Run Code Online (Sandbox Code Playgroud)

用g ++编译它,我得到以下警告:

$ g++ test.cpp -Wall -Wextra -o test
test.cpp: In function ‘int main()’:
test.cpp:4:13: warning: statement has no effect [-Wunused-value]
     (short)x;
             ^
test.cpp:6:11: warning: statement has no effect [-Wunused-value]
     (int)x;
           ^
Run Code Online (Sandbox Code Playgroud)

因此,我得出结论,转换为void与任何其他类型的转换非常不同,是目标类型相同decltype(x)或不同的东西.我猜测可能的解释是:

  • 这只是一个惯例,(void)x;但其他演员不会抑制警告.所有陈述同样没有任何效果.
  • 这种差异在某种程度上与事实有关,而事实void x;并非如此short x;.

哪一项更正确?如果没有,那么如何解释编译器警告的差异?

c++ casting void compiler-warnings suppress-warnings

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

无效{}是否合法?

这是这个问题的后续行动.
评价和在回答据说超过一次,更多的void{}没有一个有效的类型-ID,也不是一个有效的表达式.

这很好,它是有道理的,这就是全部.

然后我通过工作草案的[7.1.7.4.1/2](占位符类型扣除).
有人说:

[...]
- 对于使用return 包含占位符类型的返回类型声明的函数中发生的非丢弃  语句,  T 是声明的返回类型,并且  e 是return语句的操作数  .如果  return 语句没有操作数,那么  e 是  void{};
[...]

那么,void{}(概念上)合法与否?
如果它在工作草案中提到是可接受的(尽管只是作为- 如果它是一个 -陈述),它必须是合法的.这意味着它也decltype(void{})应该是有效的,作为一个例子.
否则,工作草案应该使用void()而不是void{}


嗯,说实话,我很确定我没有足够的技巧来指出工作草案中的错误,所以真正的问题是:我的推理出了什么问题?上面的子弹中提到了
什么void{},以及为什么在这种情况下它是一个法律表达?

c++ void language-lawyer return-type-deduction c++17

28
推荐指数
2
解决办法
673
查看次数

Void真的无法实现吗?

对javadoc中Void说:

Void类是一个不可实例化的占位符类,用于保存对表示Java关键字void的Class对象的引用.

但构造函数很简单:

private Void() {}
Run Code Online (Sandbox Code Playgroud)

这段代码实例化了一个Void:

Constructor<Void> c = Void.class.getDeclaredConstructor();
c.setAccessible(true);
Void v = c.newInstance(); // Hello sailor
Run Code Online (Sandbox Code Playgroud)

所以Void不是不可实例.

是否有办法让Void真正无法实现?

java reflection void

27
推荐指数
3
解决办法
2689
查看次数