C++ Visual Studio 2015:是否允许使用一组常量指针?
我们将很快升级到VS2015,我在突破性更改列表中发现: 常量元素C++ Visual Studio 2015:是否允许使用一组常量指针?,c++,pointers,c++11,visual-studio-2015,containers,C++,Pointers,C++11,Visual Studio 2015,Containers,我们将很快升级到VS2015,我在突破性更改列表中发现: 常量元素 C++标准始终禁止const元素容器 (如向量或集合)。Visual C++ 2013及其更早 接受这种容器。在当前版本中,此类容器失败 编译 我想知道是否有人知道这是否也适用于集合。 我知道映射仍然可以包含常量指针作为键,因为它们无论如何都是常量 例如: std::set<const QObject*> std::set 我还能这样做吗?根据微软网站上的帖子,我不这么认为。constqobject*是指向一
C++标准始终禁止const元素容器 (如向量或集合)。Visual C++ 2013及其更早 接受这种容器。在当前版本中,此类容器失败 编译
我想知道是否有人知道这是否也适用于集合。 我知道映射仍然可以包含常量指针作为键,因为它们无论如何都是常量 例如:std::set<const QObject*>
std::set
我还能这样做吗?根据微软网站上的帖子,我不这么认为。
constqobject*
是指向一个constqobject
的指针。指针本身仍然是可修改的const QObject*const
将使指针本身const
由于Microsoft文章讨论了const
对象,而constqobject*
是而不是,因此您的示例很好
我知道映射仍然可以包含常量指针作为键,因为它们无论如何都是常量
std::set
始终无效,并且std::map s代码>始终有效。原因是std::set
的分配器是std::分配器
,而std::map
的分配器是std::分配器
。根据定义,std::allocator
格式不正确。如果希望map
代码失败,则必须指定如下自定义分配器:
int i = 42;
int* const j = &i;
std::map<int* const, int* const,
std::allocator<const std::pair<int* const, int* const>>> s{{j, j}};
inti=42;
int*const j=&i;
std::map s{{j,j};
const T*
和T*const
不是一回事。引文字面上说它适用于set。然而,您的代码与引号没有太多关系,因此您很安全:)这种混淆被一种高贵但误导性的样式所强化,这种样式省略了星号(或参考号上的符号)前的空格。可视化地编写const QObject*
表明*
绑定到QObject的程度比const
更紧。移动常量
没有帮助:QObject常量*
。就像写返回a*x+b*y代码>。