簡體   English   中英

將字符串轉換為變量名稱或變量類型

[英]Convert string to variable name or variable type

是否可以通過執行以下操作將字符串轉換為變量(反之亦然):

makeVariable("int", "count");

要么

string fruit;
cin >> fruit;    // user inputs "apple"
makeVariable(fruit, "a green round object");

然后能夠通過執行以下操作來訪問它:

cout << apple; //a green round object

提前致謝!

不,這是不可能的。 這種功能在Ruby和Python等腳本語言中很常見,但C ++的工作方式與那些不同。 在C ++中,我們嘗試在編譯時盡可能多地完成程序的工作。 有時候我們可以在運行時做事,即使這樣,優秀的C ++程序員也會在編譯時找到一種方法來完成工作。

如果您知道要創建變量,則立即創建它:

int count;

您可能不知道的是變量的值,因此您可以將其推遲到運行時:

std::cin >> count;

如果你知道你需要一組變量,但不知道究竟有多少變量會創建一個地圖或一個矢量

std::vector<int> counts;

請記住,變量的名稱只不過是名稱 - 您可以在以后引用該變量。 在C ++中,推遲在運行時分配變量名稱是不可能 也沒有用的。 所有這一切都會使您的代碼更復雜,程序更慢。

你可以使用地圖。

map<string, int> numbers;
numbers["count"] = 6;
cout << numbers["count"];

你可能想看看C ++地圖

初學程序員就每種語言提出這個問題。 有一組計算機語言,這個問題的答案是“是”。 這些是動態的交互式語言 ,如BASIC,Lisp,Ruby,Python。 但想一想:變量名只存在於代碼中,以方便程序員。 如果有人隨后在新代碼中鍵入變量的名稱,則在程序運行時定義新變量才有意義。 這對於交互式語言環境來說是正確的,對於像C ++或Java這樣的編譯語言則不然。 在C ++中,當程序運行時,並且會創建虛構的新變量,沒有人可以輸入將使用該新變量的代碼。

你真正想要的是能夠在運行時將名稱與對象相關聯,這樣代碼 - 而不是人 - 可以使用該名稱來查找對象。 正如其他人已經指出的那樣,C ++標准庫的map功能為您提供了這種能力。

至少對於(反之亦然),預處理器語句有可能stringify # 請參閱此答案 ,了解如何將C ++變量名稱轉換為字符串。

不,C ++是靜態類型的,這違背了整個范例。

我之前通過在stl映射中存儲變量看到了這種類型的功能。

好吧,我想你不能制作動態變量,但你可以使用一些函數在任何外部文本文件中寫入一個新變量及其值,並從需要它的文件中訪問它的值(你也可以刪除動態變量)從文本文件。)

理論:變量是我們存儲數據的存儲器中的位置,由名稱標識,如果處理器不允許我們將數據存儲在寄存器中,我們可以將數據存儲在文本文件中,我們可以通過搜索其身份(變量名稱)來訪問其值)int文本文件,我們的數據將在它旁邊。

它只是一個想法,它應該工作,但我想這將不是很簡單,你的程序將不得不支付速度。

暫無
暫無

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

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