快速設置:我想在程序中傳遞字符串作爲指針和大小。我有一個String類和用戶定義的構造文字字符串字面:使用用戶自定義的字符串文字的底層字符數據的存儲時間
struct String { const char *ptr; size_t sz; };
inline constexpr String operator "" _string(const char *s, size_t sz) {
return {s, sz};
}
int main() {
auto s = "hello"_string;
s.ptr[0]; //<-- is this access guaranteed to work?
}
是否標準指定傳遞給我的用戶自定義文字運營商的說法有靜態的持續時間?即是上面的代碼實際上相當於寫作:
int main() {
String s{"hello", 5};
}
或是允許離開我與懸空指針時,我使用的編譯器/鏈接器的用戶定義文字? (N4527的第2.13.8節似乎沒有對用戶定義的字符串運算符的參數的存儲類的主題進行任何說明,任何指向標準適當部分的指針都將被讚賞。)
第2.13.8節aka [lex.ext] p5似乎認爲參數是*字符串*,並且它們具有靜態存儲持續時間。 – dyp
@dyp我不確定這是否清楚,但我一直在來回 –
@ShafikYaghmour這就是爲什麼我沒有把它作爲答案;) – dyp