【发布时间】:2015-11-02 18:16:27
【问题描述】:
我有一个文件结构,其中固定长度的字符串没有尾随零。 如何将字段初始化为 std::array 而不尾随零:
#pragma pack(push, 1)
struct Data {
// Compiles, but it has an undesired '\0':
std::array<char, 6> undesired_number{"12345"};
// Does not compile:
std::array<char, 5> number{"12345"}; // stripping '\0'
};
#pragma pack(pop)
【问题讨论】:
-
什么是编译器错误?不兼容的类型?恐怕基于字符串文字根本不可能。
-
为什么一定要用字符串字面量来初始化呢?
-
@Barmar 只是为了方便
-
由于字符串文字总是附加
'\0'或等价物,我的赌注是一些中间的constexpr/template 魔法,它会采用文字并去掉零并返回一个截断的值。但是它可能有问题,因为您不能修改字符串文字。也许常量表达式的例外允许它。 -
你可以制作一个用户定义的文字