Испытано простой utf8 STRLEN функции и был весьма удивлен тем, что ствол лязг полностью устранить его (НКУ не делает):Предоставляет ли C++ CTFE?
static int strlenutf8(const char* s)
{
int i = 0, l = 0;
while (s[i])
{
if ((s[i] & 0xc0) != 0x80) l++;
l++;
}
return j;
}
int main()
{
return strlenutf8("bla");
}
лязг ++ -O3 -S -fverbose-ASM:
main: # @main
.cfi_startproc
# BB#0: # %entry
movl $3, %eax
ret
Это как функция оценки времени компиляции D. Является ли это даже законным в C++?
Я имею в виду, что в конце концов должна быть причина, по которой они изобрели этот дерьмовый constexpr. Который даже не мог быть использован здесь, насколько мне известно, поскольку он сильно ограничен.
Оптимизатор может делать все, что захочет, до тех пор, пока он не нарушит указанное поведение. – SLaks
Что такое CTFE? – rubenvb
@rubenvb Я полагаю, что «компиляция функции оценки времени». –