簡體   English   中英

我可以僅將數組的特定元素聲明為常量嗎? (C / C ++ / Fortran)

[英]Can I declare only specific elements of an array as constant? (C/C++/Fortran)

場景:我將例如2D矩陣作為函數的參數傳遞,並且我希望能夠讀取和更改所有元素, 但是 我想防止在最后一列中出現意外書寫 因此,我想以某種方式告訴編譯器將此函數中的特定元素用作常量。

可能無法完成,但在某些情況下會很有用。

數組是普通類型的對象的連續塊。 因此不支持您的建議。

適當的解決方案是封裝數組並通過可以應用所需語義的函數對其進行訪問。 實際上,如果您使用C ++,則可以使用[]重載符封裝在一個類中,以便可以在仍然使用數組訪問表示法的情況下應用所需的語義。

不,這是不可能的。 那是因為array必須是通用類型,盡管int看起來與const int相同,但它不是同一類型。

在Fortran中,這是不可能的。 它沒有其他語言中的intconst int這兩個不同的類型,但是您仍然不能自動保護數組的一部分免於被修改。 intent(in)參數屬性也只能保護整個數組。

只要確保您對程序進行正確編程並進行全面測試即可。 您可以使用調試器測試內存的特定部分是否被修改。

這是C ++中一種可能性的概圖

class Item {
   protected:
      int <or some other type> value;
   public:
      Item(int x) : value (x) {};
      int Get() const ( return value; };
      void Set(int x) { throw std::runtime_error("Oh Dear!");
};

class Settable : public Item {
   public:
      void Set(int x) { value = x; };
};

然后可以將2D向量(我們正在使用C ++)

std::vector<std::vector<std::shard_ptr<item>>> list;

然后,使用上述對象的其他實例之一填充靴子。 處理異常!

我建議您在用戶嘗試覆蓋這些元素時跳過這些元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM