C++11 “GCC生产”;无法转换";使用聚合初始化时出错
我试图在编译时使用如下代码计算C字符串大小:C++11 “GCC生产”;无法转换";使用聚合初始化时出错,c++11,gcc,clang,C++11,Gcc,Clang,我试图在编译时使用如下代码计算C字符串大小: #include <stdio.h> #include <stdint.h> class StringRef { public: template<int N> constexpr StringRef(const char (&str)[N]) : m_ptr(str), m_size(uint32_t(N-1)) {} constexpr const char
#include <stdio.h>
#include <stdint.h>
class StringRef
{
public:
template<int N>
constexpr StringRef(const char (&str)[N])
: m_ptr(str), m_size(uint32_t(N-1)) {}
constexpr const char *constData() const
{ return m_ptr; }
private:
const char *m_ptr;
uint32_t m_size;
};
struct S
{
StringRef str;
};
constexpr static const struct S list[] =
{
"str",
};
int main()
{
printf("%s\n", list[0].str.constData());
return 0;
}
但代码变得丑陋,而且,叮当声不知怎么地正确理解了它
如果没有显式大括号,如何让gcc理解数组初始化?它不会变得更漂亮,但是
constepr static const struct S list[]={StringRef(“str”)}
适用于g++
。还使用constexpr static const StringRef list[]={“str”}代码>工作。不确定,但我想这都是因为g++
无法进行一些隐式转换。是的。所有其他方法都是可行的。只有struct init有问题。它没有变得更漂亮,但是constexpr static const struct S list[]={StringRef(“str”)}
适用于g++
。还使用constexpr static const StringRef list[]={“str”}代码>工作。不确定,但我想这都是因为g++
无法进行一些隐式转换。是的。所有其他方法都是可行的。只有struct init有问题。
constexpr static const struct S list[] =
{{
{ "str" },
}};