我已經發現有用的答案,爲什麼它不應該是不可能的:
Why does C# limit the set of types that can be declared as const?
Why can't structs be declared as const?
第一個有一個詳細的解答,我還是要重新讀幾次,直到我完全弄它。
第二個有一個非常簡單和明確的答案(如'構造函數可能會做任何事情,所以它必須在編譯時運行和評估')。
但都提到C#。爲什麼我可以在C++/CLI中聲明const結構,而不是在C#中聲明?
不過,我使用C++/CLI,有一個
value class CLocation
{
public:
double x, y, z;
CLocation (double i_x, double i_y, double i_z) : x(i_x), y(i_y), z(i_z) {}
CLocation (double i_all) : x(i_all), y(i_all), z(i_all) {}
...
}
,我可以輕鬆地創建一個
const CLoc c_loc (1,2,3);
這的確是不可改變的,意思是 '常量'。
爲什麼?
CLocation
還具有功能
System::Drawing::Point CLocation::ToPoint()
{
return System::Drawing::Point (x_int, y_int);
}
其上CLocation
效果很好,但不上const CLocation
。我認爲這來自C#中的限制(從上面的鏈接中可以得知),這可能來自底層IL,因此C++/CLI也受到相同限制的影響。
這是正確的嗎?
有沒有辦法在const CLocation
上運行這個成員函數?
ToPoint()函數是一個const違例,它不是一個const函數。 C++/CLI在它可以的時候支持const,但它不完美,因爲.NET元數據不允許在C++中有效的表達它。就像在函數上一樣,它必須使用的[modopt]在方法上無效。改用'initonly'。 –