Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
constexpr const char str1[] = "Anna";
constexpr const char str2[] = "Denis";
constexpr const char str3[] = "Vladimir";
constexpr const char str4[] = "Alexey";
constexpr size_t str_len(const char* const str)
{
return *str ? (1 + str_len(str + 1)) : 0;
}
constexpr size_t max(size_t l, size_t r)
{
return l > r? l : r;
}
template<typename T>
constexpr size_t maxLen(T t)
{
return str_len(t);
}
template <typename T, typename... Args>
constexpr size_t maxLen(T t, Args... other)
{
return max(str_len(t), maxLen(other...));
}
int main()
{
constexpr size_t x = maxLen(str1, str2, str3, str4);
return x;
}
const char str1[] = "Anna";
const char str2[] = "Denis";
const char str3[] = "Vladimir";
const char str4[] = "Alexey";
union str_union
{
char a1[sizeof(str1)],
a2[sizeof(str2)],
a3[sizeof(str3)],
a4[sizeof(str4)];
};
const size_t str_max_len = sizeof(str_union);
const size_t str_max_len = sizeof(union {
char a1[sizeof(str1)],
a2[sizeof(str2)],
a3[sizeof(str3)],
a4[sizeof(str4)];
});
$ cat test.c
#include <stdio.h>
const char str1[] = "Anna";
const char str2[] = "Denis";
const char str3[] = "Vladimir";
const char str4[] = "Alexey";
const size_t str_max_len = sizeof(union {
char a1[sizeof(str1)],
a2[sizeof(str2)],
a3[sizeof(str3)],
a4[sizeof(str4)];
});
$ gcc --version
gcc (Ubuntu 4.8.1-2ubuntu1~13.04) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ gcc -Wall -Wextra -c -o test.o test.c
$ nm test.o
0000000000000000 R str1
0000000000000005 R str2
000000000000000b R str3
0000000000000014 R str4
0000000000000020 R str_max_len
import std.algorithm;
enum arr = ["Anna", "Denis", "Vladimir", "Alexey"];
enum maxlen = reduce!max(map!(s => s.length)(arr));
pragma(msg, maxlen); // Вывести значение при компиляции для проверки
Вычисление максимального числа в массиве на этапе компиляции