我开始对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指向的值,我该如何转换它以便我可以将该值传递给另一个函数?
void在C++类型系统中是一个奇怪的疣.这是一个不完整的类型,无法完成,它有各种有关限制方式的魔术规则:
类型cv
void是不完整的类型,无法完成; 这种类型有一组空值.它用作不返回值的函数的返回类型.任何表达式都可以显式转换为cvvoid([expr.cast]).类型的表达式CVvoid应仅作为一个表达式语句,作为逗号表达式的操作数,作为一个第二或第三操作数?:([expr.cond]),作为操作数typeid,noexcept或decltype,如在表达return具有返回类型cv 的函数的语句void,或作为显式转换为cv 类型的操作数的语句void.
(N4778,[basic.fundamental]9)
除了对所有这些奇怪规则的痒感之外,由于它的使用方式有限,在编写模板时经常会出现一个痛苦的特殊情况; 通常情况下,我们希望它表现得更像std::monostate.
让我们想象一下,除了上面的引文,标准说的void是类似的东西
这是一个定义相当于以下类型的类型:
Run Code Online (Sandbox Code Playgroud)struct void { void()=default; template<typename T> explicit void(T &&) {}; // to allow cast to void };
保持void *魔法 - 可以别名任何对象,数据指针必须在往返过程中存活void *.
这个:
void"适当"类型的现有用例;return …c++ language-design generic-programming void language-lawyer
假设我有一个名为ptr的void*.我应该如何使用ptr存储int?写作是否足够
ptr = (void *)5;
Run Code Online (Sandbox Code Playgroud)
如果我想保存5号?或者我必须使用malloc来保存它?
public string sayHello(string name)
{
return "Hello ,"+ name;
}
Run Code Online (Sandbox Code Playgroud)
我如何在Thread中使用此方法?
ThreadStart方法只接受void方法.
我在等你的帮助.谢谢.
当C函数不接受任何参数时,是否必须通过语言规则使用"void"参数声明/定义它?当参数列表中没有任何内容时,PC-Lint似乎有问题,我想知道它是否是我不知道的语言语法中的东西.
编辑:我刚发现一个重复的(后面的傻瓜?它首先出现)问题,C void参数,它有更多的答案和解释.
如何解决"无效使用void上下文中的变量"的情况?
例如:
my $err = $soap_response->code, " ", $soap_response->string, "\n";
return $err;
Run Code Online (Sandbox Code Playgroud)
我收到警告,例如"在void上下文中无用的变量"?为什么?我该如何解决?
我有以下情况:
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.
我的实际情况比较复杂,但这段代码代表了问题.感谢帮助.
考虑以下结构:
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
可能重复:
Java Void引用类型的用途?
Void现实世界中问题的真正用法是什么?在哪种情况下我们可以使用这个类?
我尝试在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 中意味着什么,如何使用它以及这种用法的优点是什么?