【问题标题】:Does c++ provide a way to make a whole struct constant (non-modifiable)?c++ 是否提供了一种使整个结构常量(不可修改)的方法?
【发布时间】:2020-01-11 09:04:41
【问题描述】:

到目前为止,我知道我可以使所有结构成员const。但是我可以在某个地方写一次const,然后让所有成员都转向const吗?

换句话说,我希望所有结构实例都是const,即使我忘记在变量声明中添加const 修饰符。

const struct Foo {}

由于const can only be specified for objects and functions错误,上述方法不起作用;

【问题讨论】:

  • 这比struct Foo {}; const Foo f; 有什么优势?
  • 简答:否。
  • @Quentin 请看第二段(现在添加)
  • 术语:const 是“限定符”而不是“修饰符”。

标签: c++ struct types constants type-declaration


【解决方案1】:

虽然您不能创建整个类型 const,但您可以使用 const 限定符为该类型创建别名。

struct Foo {};
using ConstFoo = const Foo;
ConstFoo myFoo; // Same as const Foo myFoo;

在这里,ConstFoo 充当始终为const 的类型。

如果您希望将Foo 保留为const 类型,则可以使用

using Foo = const struct {};

【讨论】:

  • 好主意,谢谢!再次向我展示了 C++ 的灵活性。
  • 但是 auto 破坏了东西 auto foo2 = myFoo; :-/
  • @Jarod42 是吗?对我来说效果很好。但是,如果您的意思是 foo2 变得可修改,那么这是 const 变量的副本(不是引用),它不应该以这种方式表现吗?但是,是的,结构本身并不是真正的 const...
  • @NurbolAlpysbayev 但是如果打算让所有Foos 成为const,使用auto 可以绕过它。它允许您获取非const 实例。您是对的,它不会将原始 (MyFoo) 暴露给修改。
  • @FrançoisAndrieux 明白了,谢谢。但是我几乎没有在我的代码中使用 copying,所以我想这很好(我们没有其他选择)。
猜你喜欢
  • 2010-12-08
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 2016-09-24
相关资源
最近更新 更多