用C++中的命名常量初始化字符串

rhfm7lfc  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(181)

除了显式的字符串文字,我可以使用其他东西来初始化c字符串吗?

struct Person {
    char name[40];
};

constexpr char PRESIDENT[] = "George Bush";
Person somebody { "George Bush" }; //Ok
Person president { PRESIDENT }; //the value of type "const char* " cannot be used to initialize an entity of type "char"

当然,我仍然可以使用#define,但这不是最好的主意。

pjngdqdw

pjngdqdw1#

注意std::array应该优于内置数组,因为一个std::array可以直接从另一个相同大小的std::array初始化。
在这种情况下,增加一个构造函数模板还是可以实现的,如下图所示:

#include <cstddef> //for std::size_t

struct Person {
    char name[40]; 
    //constructor template
    template<std::size_t N>
    Person(const char (&arr)[N])   
    {
         for(int i = 0; i < 40 && i < N;i++)
         {
             name[i] = arr[i];
         }
    }
};
int main()
{
    constexpr char PRESIDENT[] = "George Bush";  
    Person president { PRESIDENT };    //works now

}

Working demo

相关问题