【发布时间】:2013-05-22 09:31:38
【问题描述】:
我在初始化这个结构时遇到问题(例如简化)
struct S{ const float * const * const data;};
基本上我有一个浮点缓冲区的缓冲区,我使用 const 来确保使用 S 的人不能对此成员进行任何更改(只读)。
我的问题是这很复杂且难以阅读以初始化,我想使用一个返回 const S 的 lambda,因此我可以通过写入成员名称来初始化我的 lambda 中的成员:s.data = ptr;
现在这段代码很复杂,我想知道什么是更好的解决方案。
AFAIK,拥有struct S{float ** data;} 和const S 无法有效保护成员的内容,我无法修改S::data,但我可以修改*S::data。
我该怎么办?
谢谢
【问题讨论】:
-
无论你做什么,
s.data = ptr;行都不会编译,因为data是const并且不能分配给它。如果你想这样做,你必须改变你的设计。 -
是的,目前我有一个特定的 CTor,但我希望有非 const 成员我喜欢这样:herbsutter.com/2013/04/05/…
-
这个问题太棒了:-) ... +1
-
谢谢,但我更想知道我很笨,有一个简单的解决方案,但我在3天后没有找到它
-
为什么不使用
struct S { const float *const *data; };?这会让你很容易初始化S,但是你可以传递一个const S *...