c++關鍵字累積

  • final 指定符 (C++11 起)

在C++11中關鍵字final,用來指定派生類不能覆寫虛函數,或類不能被繼承。應用到成員函數時,標識符final 在類定義中的成員函數聲明或成員函數定義的語法中,立即出現於聲明器後。應用到類時,標識符 final 出現在類定義的起始,立即在類名後。例如下面leveldb代碼中,類PosixLogger不能被其他的類繼承了

namespace leveldb {

class PosixLogger final : public Logger {
 public:
  // Creates a logger that writes to the given file.
  //
  // The PosixLogger instance takes ownership of the file handle.
  explicit PosixLogger(std::FILE* fp) : fp_(fp) {
    assert(fp != nullptr);
  }

  ~PosixLogger() override {
    std::fclose(fp_);
  }
  
.......
.......
.......

 private:
  std::FILE* const fp_;
};

}  // namespace leveldb

#endif  // STORAGE_LEVELDB_UTIL_POSIX_LOGGER_H_
  • override 指定符(C++11 起)

在C++11中關鍵字override,它用來指定基類中的虛成員函數需要在子類中顯式地重寫,如果沒有重寫則編譯器報錯。例如在上面代碼中就有關鍵字override的使用

  • default 指定符

在C++11中關鍵字default,它用來顯式默認化的函數定義,令編譯器爲類生成特殊成員函數或比較運算符 (C++20 起)的顯式指令。其中特殊成員函數有:默認構造函數、複製構造函數、移動構造函數 (C++11 起)、複製賦值運算符、移動賦值運算符 (C++11 起)、析構函數。即,如果某個特殊成員函數在聲明時使用了default,那麼編譯器會爲該函數自動生成函數體。例如leveldb代碼

namespace leveldb 
{

  class LEVELDB_EXPORT Cache;

  // Create a new cache with a fixed size capacity.  This implementation
  // of Cache uses a least-recently-used eviction policy.
  LEVELDB_EXPORT Cache* NewLRUCache(size_t capacity);

  class LEVELDB_EXPORT Cache {
  public:
    Cache() = default;

    Cache(const Cache&) = delete;
    Cache& operator=(const Cache&) = delete;

    // Destroys all existing entries by calling the "deleter"
    // function that was passed to the constructor.
    virtual ~Cache();

    // Opaque handle to an entry stored in the cache.
    struct Handle { };

  ......
  ......

}//class Cache

}//namespace leveldb

關於cache的定義時,使用了該關鍵字。

  • delete 指定符

在C++11中關鍵字delete,它的定義與default是一樣的,但是功能不一樣。delete指示禁止使用特殊成員函數。在上面的代碼中使用到了關鍵字delete

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章