[英]Why conversion from char* to std::string is more preferred than to const char* in the snippet?
[英]Preferred conversion from char (not char*) to std::string
我有一個
char<\/code> ,一個普通的舊字符,我想把它變成一個
std::string<\/code> 。
std::string(char)<\/code>當然不存在。
我可以創建一個 char 數組並將其復制進去,我可以通過字符串流,或許多其他小的迂回路線。
目前,我更喜歡
boost::lexical_cast<\/code> ,但對於這個簡單的任務來說,即使這樣也顯得過於冗長。
那么首選的方式是什么?
"
std::string
有一個構造函數,它接受一個數字和一個字符。 角色將重復給定的次數。 因此,你應該使用:
std::string str(1, ch);
只使用帶有char的重載?
即string(1, 'A')
你仍然可以使用兩個迭代器的字符串構造函數:
char c = 'x';
std::string(&c, &c + 1);
更新:
好問題詹姆斯和GMan。 剛剛搜索免費下載的“新C標准”由Derek M. Jones為“指針過去”,我的第一個熱門是:
如果表達式P指向數組對象的元素並且表達式Q指向同一數組對象的最后一個元素,則指針表達式Q + 1比較大於P ...即使Q + 1未指向數組對象的元素......
在分段體系結構上,將指針遞增到段的末尾會導致地址將分段體系結構包圍到該段的開頭(通常為零地址)。 如果在這樣的段內分配了一個數組,那么實現必須確保在數組之后有一個空間來存在一個超過結束地址的空間,或者它使用一些其他實現技術來處理這種情況(例如,如果該段used是指針表示的一部分,可能會分配一個超過結束段值的特殊值)...
C關系運算符模型使得能夠以與索引到數組對象相同的方式處理指向對象的指針。 索引到兩個不同數組對象(不是兩個較大對象的子對象)之間的關系比較很少有任何意義,標准也沒有定義對指針的這種支持。 某些應用程序確實需要使用有關存儲中不同對象的相對位置的信息。 但是,這種用法被認為不足以使委員會指定一個定義行為的模型......
大多數實現在對具有指針類型的值的任何操作之前不執行檢查。 大多數處理器使用相同的指令來執行涉及指針類型的關系比較,因為它們用於算術類型。 對於使用分段存儲器體系結構的處理器,指針值通常使用兩個組件來表示,即段號和段內的偏移量。 這種表示的結果是,為對象分配存儲有許多好處,使得它適合於單個段(即,對象的存儲不跨越段邊界)。 一個好處是涉及為一些關系運算符生成的機器代碼的優化,其僅需要檢查分段偏移分量。 當p和q指向不同的對象時,這可能導致p> = q為假但p> q為真的情況。
這適用於gcc C ++ 4.9.2( http://ideone.com/f3qhTe )
#include <iostream>
using namespace std;
int main() {
// your code goes here
std::string test;
test = (char) 76;
test += (char) 77;
test += (char) 78;
test += (char) 79;
std::cout << "test contains: " << test << std::endl;
return 0;
}
要添加答案,您只需使用初始化列表即可
std::string str = {ch};
C/C++ 方便的數據類型交換函數。 在這個 repo 中有所有 c++ 數據類型的便利函數,我把它們都寫在 python 中。
使用這個回購:
https://github.com/azizovrafael/Simple-CPlusPlus
例子:
...
int main(){
int n = INT(INPUT("Write Some Text For Console Ex. (Enter: )"));
string str = STR(n);
return 0;
}
...
#simplecplusplus
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.