簡體   English   中英

將全局域特定常量放在哪里(以及如何放置)?

[英]Where to put global domain specific constants (and how)?

我有一個C ++代碼,它是一個物理模擬工具。

我想存儲一些物理常數,不同組單位之間的轉換因子,以及更多特定於應用程序的常數(例如像enum Planes {X=0, Y=1}這樣的定義),並且我希望能夠訪問在我的代碼中到處都有它們。

最好的方法是什么?

我認為一種方法是使用嵌套名稱空間(例如“ constants”,“ units”等)創建名稱namespace constants名稱namespace constants (然后可以是我的主要名稱空間中的嵌套名稱空間)。

你會那樣做嗎?

如果使用該方法,是否必須使其成為頭文件並將其包含在所有地方?

如果我正確理解,則全局范圍名稱空間中的變量具有static鏈接,但沒有external鏈接。 然后,如果我想在不包含文件的情況下使用它們,還必須將它們聲明為extern

如您所見,我對此感到有些困惑。

如果編譯器沒有說出任何無法識別的信息,那么您是安全的。 重要的是編譯器知道在哪里可以找到該變量。 一旦包含頭文件,從技術上講,它就是該文件中代碼的復制和粘貼。 鑒於此,您需要執行一些預編譯器指令。

#ifndef _MYGLOBALS
#define _MYGLOBALS

int global_integer;
long global_long;

#endif

這樣可以確保僅將它們包含一次,並且在代碼中不會有太多的變量引用。

在大多數情況下,命名空間常量是一種解決方法。

如果使用該方法,是否必須使其成為頭文件並將其包含在所有地方?

是的,或者不是在所有地方都可以使用,而只能在真正使用的地方使用。

如果我正確理解,則全局范圍名稱空間中的變量具有靜態鏈接,但沒有外部鏈接。 然后,如果我想在不包含文件的情況下使用它們,還必須將它們聲明為extern?

是的,您必須這樣做:

// header 

namespace modulename
{
  // maybe add another namespace to specify that you have constants, but taste-dependant

   namespace domain // like maths or physics
   {
        extern const Number THIS_NUMBER; // have to be defined in the cpp
        extern const int THAT_NUMBER = 256; // if it's int-based type, you can define it -here - BUT DON'T IF IT CAN BE CHANGED : all files including this one would have to be recompiled at each value change!!
   }
}

// .cpp, where you have the definitions

namespace modulename
{
   namespace domain // like maths or physics
   {
        const Number THIS_NUMBER = Number( 256.42f ); // definition - static is implicit
   }
}

我將創建一個常量名稱空間,並在其中放入所有與全局相關的常量。 任何僅與單個類相關的常量,在類本身內聲明為靜態const。

暫無
暫無

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

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