因此,从div
函数返回的成员的顺序似乎是实现定义的.
是quot
1 日成员或者是rem
?
让我们说我做的是这样的:
generate(begin(digits), end(digits), [i = div_t{ quot, 0 }]() mutable { i = div(i.quot, 10); return i.rem; })
当然这里的问题是我不知道我是初始化i.quot
还是i.rem
在我的lambda捕获中.是否i
采用div(quot, 1)
唯一的跨平台方式来实现这一目标?
你没有指定成员的顺序是对的.该定义继承自C,它明确指出它是(强调我的):
7.20.6.2 div,ldiv和lldiv函数
3 [...]结构应包含(以任何顺序)成员
quot
(商)和rem
(其余),每个成员与参数numer
和类型具有相同的类型denom
.[...]
在C中,订单未指定的事实并不重要,并且具体包括以下示例div_t
:
6.7.8初始化
34示例10可以将结构成员初始化为非零值,而不依赖于它们的顺序:
div_t answer = { .quot = 2, .rem = -1 };
不幸的是,C++从未采用过这种语法.
我可能会在辅助函数中进行简单的赋值:
div_t make_div_t(int quot, int rem) { div_t result; result.quot = quot; result.rem = rem; return result; }
对于普通int
值,无论您使用初始化还是赋值都不重要,它们具有相同的效果.
您的分区1
也是一个有效的选项.