使用constexpr进行constexpr文字初始化

时间:2016-06-11 18:59:32

标签: c++ c++11 constexpr

这里的简单示例:

 static constexpr const char literal1[] = "abcde"; 
 static constexpr const char literal2[] = literal1;

编译错误。如何使它工作,为什么不工作?

1 个答案:

答案 0 :(得分:3)

更新

在回应评论时,这是一个经过修订的版本。

immutable::string模拟一个跟踪原始字符串文字的constexpr字符串对象。它与c ++ 17的string_view非常相似,只是模板构造函数在任何时候都不需要调用strlen

#include <cstdint>
#include <array>
#include <utility>
#include <iostream>

namespace immutable {

    struct string
    {
        template<std::size_t N>
        constexpr string(const char (&s)[N])
        : _data(s)
        , _size(N-1)
        {}

        constexpr const char* data() const { return _data; }
        constexpr std::size_t size() const { return _size; }

        const char* const _data;
        const std::size_t _size;
    };
    std::ostream& operator<<(std::ostream& os, string s)
    {
        return os.write(s.data(), s.size());
    }
}


static constexpr auto literal1 = immutable::string("abcde");
static constexpr auto literal2 = literal1;

int main()
{
    std::cout << literal1 << std::endl;
    std::cout << literal2 << std::endl;
}