gpt4 book ai didi

c# - 为什么 'stackalloc' 关键字不适用于属性?

转载 作者:行者123 更新时间:2023-11-30 16:06:26 25 4
gpt4 key购买 nike

我最近在用 C# 编写一些不安全的代码并注意到这会产生语法错误:

public unsafe class UnsafeByteStream
{
public UnsafeByteStream(int capacity)
{
this.Buffer = stackalloc byte[capacity];
}

public byte* Buffer { get; }
}

结果是:“无效的表达式术语‘stackalloc’/;预期的/}预期的”。但是,当我首先将其分配给本地字段时,如下所示:

public UnsafeByteStream(int capacity)
{
byte* buffer = stackalloc byte[capacity];
this.Buffer = buffer;
}

则不会产生语法错误。

这是有原因的,还是编译器出了问题?我知道指针类型的属性并不是那么常见,但我仍然不明白为什么这是一个语法错误而不是一个语义错误,假设有问题用代码。

最佳答案

stackalloc 必须 是局部变量声明的一部分,如 discussed in the documentation .

The [stackalloc] keyword is valid only in local variable initializers. The following code causes compiler errors.

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 .. 形式。

(后来对属性的赋值是一个未捕获的语义错误。)

关于c# - 为什么 'stackalloc' 关键字不适用于属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32343050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com