C++初始值设定项列表约束检查
C++ initializer list constraint checking
我正在尝试明确限制我正在创建的类的最大大小,并提出了一个似乎有效但看起来很丑陋的解决方案。这个例子有点做作,但我想知道万一情况更自然地出现。
这是原样:
PriorityQueue(const unsigned int maxSizeIn) :
maxSize((maxSizeIn >= SOME_CONSTANT) ? SOME_CONSTANT - 1 : maxSizeIn),
queueArray(new PriorityPair<T>*[maxSizeIn]()),
currentHeapSize(0)
{
}
笨拙来自在初始化器列表中具有三元表达式。虽然这确实有效,但它看起来不是特别好,迫使我按行分隔列表的每个组件。我试图将该逻辑移动到构造函数的主体中,但我在尝试时遇到了问题。
为了清楚起见,我编辑了原文,以更好地突出我所问的内容。也就是说,是否有一种功能等效的方法更干净地对初始值设定项列表进行约束。
对于这样的问题,应该采取什么解决方案?
您可以使用
std::min
:
maxSize(std::min(maxSizeIn, std::numeric_limits<unsigned int>::max() - 1));
在这里,std::numeric_limits<unsigned int>::max() - 1
可以是任何常量 - 在您的示例中,这将是SOME_CONSTANT
.
尽管请注意,在您的情况下没有任何意义。 maxSizeIn
永远不能大于其类型的最大值。如果有人指定的大小大于构造函数std::numeric_limits<unsigned int>::max()
的大小,则该人很快就会注意到他们的参数已溢出。
不过,你可以通过一个unsigned long
。
相关文章:
- C++ 创建包含链表和字符串的对象的链接列表时出错
- 链表,将列表复制到另一个列表
- 如何在 sqlite3 中的表中添加整数列表
- C++ 双向链表:使用矩阵类成员创建和填充列表
- 创建一个棋盘格或"Interweave"两个链接列表。IE 更改两个链表的指针
- C++声明双链表,使用两个 for 循环双向遍历列表并打印
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 如何理解C++中链表的自由列表实现?
- 自定义链表const_iterator无法遍历列表的非const实例
- 删除单链表列表
- 使用 _getch 创建链表并反转列表
- C++ 链表列表运算符[]
- 如何使用初始值设定项列表来指导创建链表?
- C++ 链表合并排序的实现在连接 1 个以上节点的子列表时失败
- 链表.如何删除列表中的第一个节点?
- 通过自定义结构和链接列表类中的C 中的哈希表
- 在 txt 文件中创建表/组织列表
- 访问链表中的结构(带有指向其子实现的指针列表的树)
- 使用类继承将单个喜欢的列表转换为双向链表
- 是否可以将新的列表节点分配给链表的现有节点