簡單的例子在這裏:constexpr文字初始化用constexpr
static constexpr const char literal1[] = "abcde";
static constexpr const char literal2[] = literal1;
編譯錯誤。如何使它工作,爲什麼不行?
簡單的例子在這裏:constexpr文字初始化用constexpr
static constexpr const char literal1[] = "abcde";
static constexpr const char literal2[] = literal1;
編譯錯誤。如何使它工作,爲什麼不行?
更新:
迴應評論,這裏是一個修訂版本。
類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;
}
那麼,你正在改變'literal2'的實際類型。我不確定這是OP想要的。 – skypjack
@skypjack我們怎麼知道他想要什麼?他沒有說。 –
@skypjack更新示例給予更一致的感覺。 –
數組無法從其他數組中初始化。 (字符串文字是一個例外。) –
[This](http://melpon.org/wandbox/permlink/gM5T1bdeqCNItFdI)是我能想到的最好的。 –
我想你也可以使用Scott Schurr的Boost幻燈片的'str_const'模板。 http://stackoverflow.com/questions/27291903/passing-constexpr-objects-around –