我最近用 C# 编写了一些不安全的代码,注意到这会产生语法错误:
public unsafe class UnsafeByteStream
{
public UnsafeByteStream(int capacity)
{
this.Buffer = stackalloc byte[capacity];
}
public byte* Buffer { get; }
}
结果是:"Invalid expression term 'stackalloc' / ; expected / } expected"
。但是,当我首先将其分配给本地字段时,如下所示:
public UnsafeByteStream(int capacity)
{
byte* buffer = stackalloc byte[capacity];
this.Buffer = buffer;
}
那么就不会产生语法错误。
这是有原因的,还是编译器出了问题?我知道指针类型属性并不那么常见,但我仍然不明白为什么这是一个syntax错误而不是semantic一,假设代码有问题。
stackalloc
must成为局部变量声明的一部分,如文档中讨论过 https://msdn.microsoft.com/en-us/library/cx9s2sy4.aspx.
[stackalloc] 关键字是仅在局部变量中有效初始化器。以下代码会导致编译器错误。
int* block;
// The following assignment statement causes compiler errors. You
// can use stackalloc only when declaring and initializing a local
// variable.
block = stackalloc int[100];
因此,这确实是一个语法错误;并拒绝obj.Property = stackalloc ..
form.
(稍后对属性的赋值是一个未捕获的语义错误。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)