标签: void

将void指针强制转换为struct

我开始对C感到舒服,然后遇到了铸造.如果我在*.h文件中定义了以下内容

struct data {
    int value;
    char *label;
};
Run Code Online (Sandbox Code Playgroud)

这是另一个*.h文件

# define TYPE      void*
Run Code Online (Sandbox Code Playgroud)

如何将void指针强制转换为struct,以便我可以使用传递给函数的变量"TYPE val"?例如,如果我想利用TYPE val指向的值,我该如何转换它以便我可以将该值传递给另一个函数?

c casting void

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

如果void实际定义为`struct void {};`,那么现有的C++代码会破坏多少

void在C++类型系统中是一个奇怪的疣.这是一个不完整的类型,无法完成,它有各种有关限制方式的魔术规则:

类型cv void是不完整的类型,无法完成; 这种类型有一组空值.它用作不返回值的函数的返回类型.任何表达式都可以显式转换为cv void([expr.cast]).类型的表达式CV void应仅作为一个表达式语句,作为逗号表达式的操作数,作为一个第二或第三操作数?:([expr.cond]),作为操作数typeid,noexceptdecltype,如在表达return具有返回类型cv 的函数的语句void,或作为显式转换为cv 类型的操作数的语句void.

(N4778,[basic.fundamental]9)

除了对所有这些奇怪规则的痒感之外,由于它的使用方式有限,在编写模板时经常会出现一个痛苦的特殊情况; 通常情况下,我们希望它表现得更像std::monostate.


让我们想象一下,除了上面的引文,标准说的void是类似的东西

这是一个定义相当于以下类型的类型:

struct void {
    void()=default;
    template<typename T> explicit void(T &&) {}; // to allow cast to void
};
Run Code Online (Sandbox Code Playgroud)

保持void *魔法 - 可以别名任何对象,数据指针必须在往返过程中存活void *.

这个:

  • 应涵盖void"适当"类型的现有用例;
  • 可能允许删除关于它通过标准传播的相当数量的垃圾 - 例如[expr.cond]2可能是不需要的,[stmt.return]将大大简化(同时仍然保持"异常",return …

c++ language-design generic-programming void language-lawyer

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

C编程:将int指针转换为int?

假设我有一个名为ptr的void*.我应该如何使用ptr存储int?写作是否足够

ptr = (void *)5;
Run Code Online (Sandbox Code Playgroud)

如果我想保存5号?或者我必须使用malloc来保存它?

c pointers void

19
推荐指数
2
解决办法
5万
查看次数

C#thread方法返回一个值?

可能重复:
从Thread.Start()的委托函数访问返回值

public string sayHello(string name)
{
    return "Hello ,"+ name;
}
Run Code Online (Sandbox Code Playgroud)

我如何在Thread中使用此方法?

ThreadStart方法只接受void方法.

我在等你的帮助.谢谢.

c# multithreading return void

19
推荐指数
1
解决办法
4万
查看次数

在c:func(void)与func()

当C函数不接受任何参数时,是否必须通过语言规则使用"void"参数声明/定义它?当参数列表中没有任何内容时,PC-Lint似乎有问题,我想知道它是否是我不知道的语言语法中的东西.

编辑:我刚发现一个重复的(后面的傻瓜?它首先出现)问题,C void参数,它有更多的答案和解释.

c lint function void

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

如何解决"无效使用void上下文中的变量"的情况?

如何解决"无效使用void上下文中的变量"的情况?

例如:

  my $err = $soap_response->code, " ", $soap_response->string, "\n";
  return $err;
Run Code Online (Sandbox Code Playgroud)

我收到警告,例如"在void上下文中无用的变量"?为什么?我该如何解决?

string perl warnings scope void

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

使用mockito操纵参数的存根方法

我有以下情况:

class Worker {  
  public Integer somework() {  
      Integer k=0;  
      Helper h= new Helper();  
      h.change(k);  
      return k;  
    }
}

class Helper {
  public void change(Integer k) {
    //k = Some calcs
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在制作unitests Worker,显然我想要模拟Helper类,以便他的change方法总是将1放入k.

我的实际情况比较复杂,但这段代码代表了问题.感谢帮助.

java methods unit-testing void mockito

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

void(),逗号运算符(运算符)和不可能(?)重载

考虑以下结构:

struct S {};
Run Code Online (Sandbox Code Playgroud)

在C++ 14中,以下定义是有效的:

constexpr auto f() { return S{}, 'c'; }
Run Code Online (Sandbox Code Playgroud)

以及以下一个:

constexpr auto f() { return S{}, void(); }
Run Code Online (Sandbox Code Playgroud)

现在,请考虑以下涉及两个定义中的第一个的工作代码段:

#include<type_traits>

struct S {};

constexpr int operator,(S, char) { return 42; }
constexpr auto f() { return S{}, 'c'; }

int main() {
    constexpr int i{f()};
    static_assert(i == 42, "!");
    static_assert(std::is_same<decltype(f()), int>::value, "!");
}
Run Code Online (Sandbox Code Playgroud)

说来不是技术上的,逗号运算符的重载拦截了这对,S{}, 'c'并返回一个整数,正如在main函数中正确验证的那样.

现在,假设我想对第二个定义做同样的事情f:

constexpr auto f() { return S{}, void(); }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,逗号运算符应截取表单 …

c++ operator-overloading void comma-operator language-lawyer

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

为什么JDK中存在Void包装类?

可能重复:
Java Void引用类型的用途?

Void现实世界中问题的真正用法是什么?在哪种情况下我们可以使用这个类?

java void

17
推荐指数
3
解决办法
3728
查看次数

Void返回类型在Kotlin中意味着什么

我尝试在Kotlin中创建函数而不返回值.我编写了一个类似于Java的函数,但使用了Kotlin语法

fun hello(name: String): Void {
    println("Hello $name");
}
Run Code Online (Sandbox Code Playgroud)

我有一个错误

错误:带有块体('{...}')的函数中需要'return'表达式

经过几次修改后,我得到了具有可空Void作为返回类型的工作函数.但这并不是我所需要的

fun hello(name: String): Void? {
    println("Hello $name");
    return null
}
Run Code Online (Sandbox Code Playgroud)

根据Kotlin文档,单元类型对应于Java中的void类型.所以在Kotlin中没有返回值的正确函数是

fun hello(name: String): Unit {
    println("Hello $name");
}
Run Code Online (Sandbox Code Playgroud)

要么

fun hello(name: String) {
    println("Hello $name");
}
Run Code Online (Sandbox Code Playgroud)

问题是:Void在Kotlin 中意味着什么,如何使用它以及这种用法的优点是什么?

java return-type void kotlin

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