我最近用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;
}然后就不会产生语法错误。
这是有原因的,还是编译器出了问题?我理解指针类型的属性并不那么常见,但我仍然不明白为什么这是一个语法错误,而不是语义错误,假设代码有问题。
发布于 2015-09-02 00:54:10
stackalloc必须是局部变量声明的一部分,如在文件中讨论。
stackalloc关键字仅在局部变量初始化器中有效。下面的代码会导致编译器错误。 int*块;//以下赋值语句将导致编译器错误。您只能在声明和初始化局部变量//变量时使用stackalloc。区块= stackalloc int100;
因此,它确实是一个语法错误;并且拒绝obj.Property = stackalloc ..表单。
(后面分配给属性的是一个不明确的语义错误。)
https://stackoverflow.com/questions/32343050
复制相似问题