快速设置:我想在程序中传递字符串作为指针和大小。我有一个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