我有一个叫做的函数:
void initializeJSP(string Experiment)
Run Code Online (Sandbox Code Playgroud)
在我的MyJSP.h文件中,我有:
2: void initializeJSP(string Experiment);
Run Code Online (Sandbox Code Playgroud)
当我编译时,我收到此错误:
MyJSP.h:2错误:变量或字段initializeJSP声明为void
问题出在哪儿?
好的,所以我听到了关于这个主题的不同意见,只是想确保我理解正确.
声明void f();和void f(void);意思完全相同,功能f不带任何参数.同样的定义.
声明void f(void);意味着f不带任何参数.
声明void f();意味着函数f可能有也可能没有参数,如果有,我们不知道它们是什么类型的参数,或者它们有多少参数.请注意,它与省略号不同,我们无法使用va_list.
现在这里的事情变得有趣了.
宣言:
void f();
Run Code Online (Sandbox Code Playgroud)
定义:
void f(int a, int b, float c)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
宣言:
void f();
Run Code Online (Sandbox Code Playgroud)
定义:
void f()
{
//...
}
Run Code Online (Sandbox Code Playgroud)
当我们f使用正确的参数,错误的参数和根本没有参数调用时,在情况1和2的编译时会发生什么?运行时会发生什么?
如果我f用参数声明,但没有它们来定义它,它会有所作为吗?我应该能够解决函数体中的参数吗?
我用PHP 7测试了返回类型.
我创建了一个简单的脚本来测试PHP 7的返回类型:
<?php
Class Obj {
public function __construct(){
}
public function test(): string { //a string needs to be returned
return "ok";
}
}
function foo(): Obj { //instance of Obj needs to be returned
return new Obj();
}
$o = foo();
echo $o->test(); // output: ok
Run Code Online (Sandbox Code Playgroud)
现在,当您指定返回类型时,在其他编程语言中,void这意味着您无法返回任何内容,否则您将收到错误.所以我写了这个脚本:
<?php
function foo(): void {
}
foo();
Run Code Online (Sandbox Code Playgroud)
现在在上面的脚本中,预期的输出是什么.相反,它给了我一个致命的错误:
致命错误:foo()的返回值必须是void的实例,在第2行返回none
我的问题是(我找不到),在PHP 7中会有类似的void类型吗?
这是一个代码,目的是将程序计数器设置为跳转到地址0x1000.我知道它做了什么,但我不明白怎么做.这与我缺乏C语言知识有关.可能你可以赐教.这是声明/功能(我甚至不知道它是什么:))
((void (*)())0x1000)();
Run Code Online (Sandbox Code Playgroud)
我认为它是指向返回void并且不接受任何参数的函数的指针.如果我错了,请纠正我.
我正在寻找标准中对这一事实的正式解释.我已经找到了3.9.1/9所说的内容并尝试用该部分作出解释.
第3.9.1/9节,N3797:
void类型具有一组空值.void类型是不完整的类型,无法完成.它用作不返回值的函数的返回类型.任何表达式都可以显式转换为cv void(5.4)类型.void类型的表达式只能用作表达式语句(6.2),作为逗号表达式(5.18)的操作数,作为?:( 5.16)的第二个或第三个操作数,作为typeid,noexcept或者操作数的操作数. decltype,作为返回类型为void的函数的返回语句(6.6.3)中的表达式,或者作为显式转换为类型cv void的操作数.
我不明白它是如何暗示void类型有一组空的值?
假设类型T具有一组空值.为什么编译器在遇到以下行时会抛出错误:
extern T v;
Run Code Online (Sandbox Code Playgroud)
我们可以通过以下方式对不完整类型的变量进行decalre:
#include <iostream>
#include <cstring>
using namespace std;
struct Foo;
extern Foo f; //OK!
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
它工作正常
它不能在void类型上完成
#include <iostream>
#include <cstring>
using namespace std;
extern void f; //compile-time error
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
我知道声明的方法void不会返回任何内容.
但似乎在C#void中只是一个关键字,而是一个真实的类型.
void是一个别名System.Void就像int那是System.Int32.
为什么我不允许使用那种类型? 它没有任何意义,但这只是对逻辑的一些想法.
也不
var nothing = new System.Void();
Run Code Online (Sandbox Code Playgroud)
(说我应该使用void(不是别名?))
也不是
var nothing = new void();
Run Code Online (Sandbox Code Playgroud)
编译.
也不可能使用这样的东西:
void GiveMeNothing() { }
void GiveMeNothingAgain()
{
return GiveMeNothing();
}
Run Code Online (Sandbox Code Playgroud)
那么重点是什么System.Void?
我很好奇,如果有一个合理的原因,当调用方法的返回类型也是void时,为什么C#不支持调用void方法作为return语句的一部分.
public void MethodA()
{
return;
}
public void MethodB()
{
return MethodA();
}
Run Code Online (Sandbox Code Playgroud)
所以我们通常会看到这个:
public void MethodMeh()
{
if (expression)
{
MethodA();
return;
}
// Do more stuff
}
Run Code Online (Sandbox Code Playgroud)
......当我们可以使用它时:
public void MethodAwesome()
{
if (expression)
return MethodA();
// Do more stuff
}
Run Code Online (Sandbox Code Playgroud)
由于C#如何处理void,这是一种语言限制吗?
在C++中删除这样的对象有什么不对吗?
MyCls* c = new MyCls();
void* p = (void*)c;
delete (MyCls*)p;
Run Code Online (Sandbox Code Playgroud) 在 TypeScript 中,您可以将函数注释为返回void:
function fn1(): void {
// OK
}
function fn2(): void {
// Error
return 3;
}
Run Code Online (Sandbox Code Playgroud)
您还可以注释要返回的函数undefined:
function fn3(): undefined {
// OK
return;
}
function fn4(): undefined {
// Error
return 3;
}
Run Code Online (Sandbox Code Playgroud)
所以看起来如果你调用一个返回的函数void,你总是会得到值undefined。但是你不能写这个代码:
function fn5(): void {
}
let u: undefined = fn5(); // Error
Run Code Online (Sandbox Code Playgroud)
为什么不void只是 的别名undefined?它真的需要存在吗?
undefined和 之间究竟有什么区别void 0?
哪个是首选,为什么?
void ×10
c++ ×4
c ×2
c# ×2
pointers ×2
undefined ×2
.net ×1
function ×1
javascript ×1
php ×1
php-7 ×1
return-type ×1
string ×1
typescript ×1