私はC++ 11でconstexprの機能上の制限を考慮するとhttps://stackoverflow.com/a/15863826/2859099は、辞書的にC++が11
#include <cstddef>
#include <stdexcept>
class str_const
{
public:
template<std::size_t N>
constexpr str_const(const char(&arr)[N]) noexcept : str{arr}, len{N - 1}
{
}
constexpr char operator[](std::size_t i) const
{
return i < len ? str[i] : throw std::out_of_range{""};
}
constexpr std::size_t size() const noexcept { return len; }
constexpr operator const char*() const noexcept { return str; }
constexpr const char* c_str() const noexcept { return str; }
private:
const char* const str;
const std::size_t len;
};
からインスピレーションを得たstr_const
クラスを使用しようとしている、どのように実装するには、コンパイル時に2つの文字列を比較します以下の辞書式の比較:
constexpr bool operator<(str_const lhs, str_const rhs)
{
}
答えが分かりますが、const文のコンテキストで呼び出された場合にコンパイルが失敗するだけなので、このthrow文には何の問題もありません。 –
あなたは絶対に正しいです。 http://stackoverflow.com/questions/34280729/throw-in-constexpr-function – CygnusX1