我想遵循一些优秀的C++建议来计算一次数组长度,然后使用一个值,而不必像这样调用一个函数:
代替:
for( int i = 0; i < arr.length; ++i )
Run Code Online (Sandbox Code Playgroud)
我写
const int size = arr.length; // or arr.Count()
for( int i = 0; i < size; ++i )
Run Code Online (Sandbox Code Playgroud)
在阅读了另一个线程(在循环中执行array.length或list.count是否代价高昂)之后,我注意到性能增益没有实际意义,而且这是C#而不是C++.
第二个原因是使用值初始化我的数组:
const int size = arr.Length;
int[] primes_ = new int[size];
所以我的问题是:
为什么我不能宣布这个呢?它吐了我的错误:
Error 2 The expression being assigned to 'length' must be constant
这是非常令人困惑的,因为我的价值是不变的.但是,当我删除它时const,poof会消息....什么?
Length读取的初始化:
public int Length {get;}来自MSDN.这是特别令人困惑的,因为我的上一个问题(Get-Set Accessor功能因get-set关键字的存在而不同)明确地给了我答案"不可能只声明get和leave set缺席."
我不清楚为什么我可以宣布int size = arr.Length,但不是const int size = arr.Length.为什么会这样?
该const关键字需要在编译时已知的值- .NET编译无法确定的值arr.length,当你编译代码,所以你不能把它分配给一个const.
关于你关于getter和setter的最后一个问题 - 只有在你使用捷径语法时才必须声明两者:ie private long n { get; private set; }.如果对本地字段使用完整的详细属性声明,则可以声明一个get:
private long _n = 0;
private long N { get { return _n; } }
Run Code Online (Sandbox Code Playgroud)