全局作用域

全局作用域

最近在讀mxnet源碼的時候,發現一個全局作用域問題,初看不明所以,特此記錄分享;


*!
 * \\brief Generic macro to register an EntryType
 * There is a complete example in FactoryRegistryEntryBase.
 
 * \\param EntryType The type of registry entry.
 * \\param EntryTypeName The typename of EntryType, must do not contain namespace :: .
 * \\param Name The name to be registered.
 * \\sa FactoryRegistryEntryBase
 */
#define DMLC_REGISTRY_REGISTER(EntryType, EntryTypeName, Name) \\
 static DMLC_ATTRIBUTE_UNUSED EntryType & __make_ ## EntryTypeName ## _ ## Name ## __ = \\
 ::dmlc::Registry<entrytype>::Get()->__REGISTER__(#Name) \\/<entrytype>

上述代碼中,用到了全局作用域/命名空間/類內靜態方法的引用三種作用域,其中全局作用域就是以“::”開頭,這點與命名空間dlmc以及類名Registry<entrytype>是有區別的。/<entrytype>

關於全局作用域,舉個簡單的例子:

  1. #include <iostream>
  2. int g_data = 10; // 具有全局作用域
  3. int main()
  4. {
  5. std::cout << g_data << std::endl; // 輸出10
  6. int g_data= 0;
  7. std::cout << g_data << std::endl; // 輸出0
  8. std::cout << ::g_data << std::endl; // 輸出10
  9. }


分享到:


相關文章: