在C中定义常量C字符串的正确方法?

在C中定义常量C字符串的正确方法?,第1张

概述大多数时候我看到常量C字符串定义为: static char const* MY_CONSTANT = "Hello World"; 但是,指针本身不是const.下面这样做不太合适吗? static char const* const MY_CONSTANT = "Hello World"; 有两个目标,这样的常量全局,我想: >不允许修改字符串 >不要让变量指向其他任何东西 我只是假定定义常量 大多数时候我看到常量C字符串定义为:
static char const* MY_CONSTANT = "Hello World";

但是,指针本身不是const.下面这样做不太合适吗?

static char const* const MY_CONSTANT = "Hello World";

有两个目标,这样的常量全局,我想:

>不允许修改字符串
>不要让变量指向其他任何东西

我只是假定定义常量字符串时需要这2个目标.

另一个有趣的事情是,我被允许这样做:

int main(){    auto MY_CONSTANT = "";    MY_CONSTANT = "Another String";}

这告诉我自动将字符串推断为char const *,而不是char const * const.

所以我有两个主要问题:

>定义常量c风格字符串最合适的方法是什么(我想,常量指针是什么,更普遍的问题?).你为什么选择一个或另一个?
>关于我自己的例子,它是有道理的,为什么它选择char const *(因为它是数组的数组是常量,而不是指针本身).我可以自动推断到char const * const或者我可以更改代码,使其导致这样的类型?

解决方法 那么如果它是一个真正的常数,那么constexpr将是C 11的方式来做到这一点:
constexpr char const* MY_CONSTANT = "Hello World";

第一个例子:

static char const* MY_CONSTANT = "Hello World";

只是说我有一个指向一个具有静态存储持续时间的char const的指针,如果它不在一个函数之外,它将使它成为一个全局的.

如果我们需要指针也是const,那么我们需要你介绍的第二个表单.这一切都取决于指针是否确实应该是const.在大多数情况下,你的代码没有顶级const的原因是因为他们忘记把它放在不是因为它们并不意味着指针也是const.

static如果你想要一个const成员是每个实例或每个类,static就会有所不同:

class A{        char const* const const_per_instance = "Other Const String";    public:        constexpr static char const* const const_per_class = "Hello World" ;};

如果我们要求const是每个类,那么我们需要使用静态,否则不是.如果您不允许使用constexpr,该示例会略有变化:

class A{        char const* const const_per_instance = "Other Const String";    public:        static char const* const const_per_class  ;};char const* const A::const_per_class = "Hello World" ;

但是精华是一样的只是语法是不同的.

对于您的第二个问题,Gotw #92表示自动下降顶级const,给出的一个示例如下:

const int   ci  = val;  auto        g   = ci;

它说:

The type of g is int.

Remember,just because ci is const (read-only) doesn’t have any
bearing on whether we want g to be const. It’s a separate variable. If
we wanted g to be const,we would have saID const auto as we dID in case c above

正在提及的例子如下:

int         val = 0;  //..const auto  c   = val;
总结

以上是内存溢出为你收集整理的在C中定义常量C字符串的正确方法?全部内容,希望文章能够帮你解决在C中定义常量C字符串的正确方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1235693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存