簡體   English   中英

C ++在運行時分配一個const值?

[英]C++ Assign a const value at run-time?

我有一個在運行時期間永遠不會改變的常量值,但直到運行時才能知道。

有沒有辦法在不定義常量的情況下聲明一個常量(或者作為一個類的成員),並且還可以確定一次(並且只有一次)計算一個計算值; 或者我將不得不求助於非const聲明並使用編碼S&P( ALL_CAPS變量名稱,如果在類中的static聲明等)來嘗試阻止它變化?

澄清:

雖然這些都是很好的答案,但我所擁有的現實情況更為復雜:

該程序有一個主循環,在處理和渲染之間不斷運行; 用戶可以設置所需的選項,一旦設置它們,它們將永遠不會改變,直到程序重新啟動。 為主循環之前可以確定的任何內容設置“初始化”功能,但是必須在處理階段期間在循環的中間執行依賴於用戶交互的值。 (目前,我想到了持久的數據存儲技術......)

像這樣的東西?

const int x = calcConstant();

如果它是類成員,那么使用構造函數初始化列表,如Yuushi的答案。

您可以在structclass定義它並使用初始化列表:

#include <iostream>

struct has_const_member
{
    const int x;

    has_const_member(int x_)
      : x(x_)
    { }

};

int main()
{
    int foo = 0;
    std::cin >> foo;
    has_const_member h(foo);
    std::cout << h.x << "\n";
    return 0;
}

作為靜態或函數局部變量:

const int x = calcConstant();

作為班級成員:

struct ConstContainer {
    ConstContainer(int x) : x(x) {}
    const int x;
};

是的,您可以使用初始化方法和gettor方法創建私有靜態單例字段。 以下是如何執行此操作的示例:

// In foo.h
class Foo
{
public:
    // Caller must ensure that initializeGlobalValue
    // was already called.
    static int getGlobalValue() { 
        if (!initialized) {
            ... handle the error ...
        }
        return global_value; 
    }

    static void initializeGlobalValue(...)

private:
    static bool initialized;
    static int  global_value;
};

// In foo.cpp
bool Foo::initialized = false;
int Foo::global_value;

void Foo::initializeGlobalValue(...) {
    if (initialized) {
        ...handle the error...
    }
    global_value = ...;
    initialized = true;
}

暫無
暫無

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

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