草庐IT

BTN_SIZE

全部标签

c++ - "int size = 10;"是否产生常量表达式?

以下代码在gcc4.8和Clang3.2下编译:intmain(){intsize=10;intarr[size];}C++标准的8.3.4/1规定数组的大小必须是一个整数常量表达式,而size似乎不是。这是两个编译器中的错误,还是我遗漏了什么?最新的VC++CTP拒绝带有这个有趣消息的代码:errorC2466:cannotallocateanarrayofconstantsize0有趣的部分是它似乎认为size为零。但至少它拒绝了代码。gcc和Clang不应该做同样的事情吗? 最佳答案 这是variablelengtharray

c++ - 如何检测分配给 size_t 的负数?

此声明在g++-pedantic-Wall(版本4.6.3)中编译时没有警告:std::size_tfoo=-42;不那么明显的虚假是声明一个带有size_t参数的函数,并用一个负值调用它。这样的函数能否防止无意的否定论点(显示为无数个quintillion,遵守§4.7/2)?不完整的答案:只是将size_t更改为(signed)long会丢弃size_t的语义和其他优点。将其更改为ssize_t只是POSIX,而不是标准。将其更改为ptrdiff_t很脆弱,有时会损坏。测试大值(高位设置等)是任意的。 最佳答案 为此发出警告的问

c++ - 如何检测分配给 size_t 的负数?

此声明在g++-pedantic-Wall(版本4.6.3)中编译时没有警告:std::size_tfoo=-42;不那么明显的虚假是声明一个带有size_t参数的函数,并用一个负值调用它。这样的函数能否防止无意的否定论点(显示为无数个quintillion,遵守§4.7/2)?不完整的答案:只是将size_t更改为(signed)long会丢弃size_t的语义和其他优点。将其更改为ssize_t只是POSIX,而不是标准。将其更改为ptrdiff_t很脆弱,有时会损坏。测试大值(高位设置等)是任意的。 最佳答案 为此发出警告的问

c++ - 在哪里画 size_t 和 unsigned int 之间的界限?

这个问题在这里已经有了答案:unsignedintvs.size_t(8个回答)关闭8年前。我目前正在将我多年来一直在开发的代码库中的unsignedint的某些用途转换为size_t。我了解两者之间的区别,例如unsignedint可能是32位,而指针和size_t可能是64位。我的问题更多是关于我应该在哪里使用其中一个以及人们使用哪种约定在两者之间进行选择。很明显,内存分配应该使用size_t而不是unsignedint作为参数,或者容器类应该使用size_t作为大小和STL中的索引。这些是阅读size_t与unsignedint的好处时引用的常见案例。然而,在进行代码库转换时,我

c++ - 在哪里画 size_t 和 unsigned int 之间的界限?

这个问题在这里已经有了答案:unsignedintvs.size_t(8个回答)关闭8年前。我目前正在将我多年来一直在开发的代码库中的unsignedint的某些用途转换为size_t。我了解两者之间的区别,例如unsignedint可能是32位,而指针和size_t可能是64位。我的问题更多是关于我应该在哪里使用其中一个以及人们使用哪种约定在两者之间进行选择。很明显,内存分配应该使用size_t而不是unsignedint作为参数,或者容器类应该使用size_t作为大小和STL中的索引。这些是阅读size_t与unsignedint的好处时引用的常见案例。然而,在进行代码库转换时,我

c++ - 哪个 C++ 标准头文件定义了 SIZE_MAX?

我正在开发一个恰好在几个地方使用SIZE_MAX的现有C++代码库。我做了一些重构,现在SIZE_MAX没有在其中一个模块中定义。这个问题出现在Travis-CI试图在Linux上构建项目。在我重构之前它工作得很好,但是很难跟踪包含了哪些确切的头文件。为了在本地复制问题,我安装了一个带有默认gcc的UbuntuVM,并且能够重现它。以下是相关来源:#includeintmain(){size_ta=SIZE_MAX;}命令行很简单:g++a.cpp错误是:a.cpp:Infunction‘intmain()’:a.cpp:5:16:error:‘SIZE_MAX’wasnotdecla

c++ - 哪个 C++ 标准头文件定义了 SIZE_MAX?

我正在开发一个恰好在几个地方使用SIZE_MAX的现有C++代码库。我做了一些重构,现在SIZE_MAX没有在其中一个模块中定义。这个问题出现在Travis-CI试图在Linux上构建项目。在我重构之前它工作得很好,但是很难跟踪包含了哪些确切的头文件。为了在本地复制问题,我安装了一个带有默认gcc的UbuntuVM,并且能够重现它。以下是相关来源:#includeintmain(){size_ta=SIZE_MAX;}命令行很简单:g++a.cpp错误是:a.cpp:Infunction‘intmain()’:a.cpp:5:16:error:‘SIZE_MAX’wasnotdecla

c++ - 为什么顺序容器同时具有 size_type 和 difference_type?

vector两者都有vector::size_type和vector::difference_type.从size_type开始,两者似乎都没有必要存在。保证能够保存与vector的最大元素数一样大的值。可能包含在给定的系统上,并且在任何有效的用例中,difference_type必须小于或等于最大元素数,即顺序容器中两个元素之间的距离永远不会大于顺序容器可以包含的最大元素数。有人可以举个例子说明两者之间有什么区别吗? 最佳答案 container::difference_type存在是因为对于某些序列容器,您可以减去迭代器。该减法

c++ - 为什么顺序容器同时具有 size_type 和 difference_type?

vector两者都有vector::size_type和vector::difference_type.从size_type开始,两者似乎都没有必要存在。保证能够保存与vector的最大元素数一样大的值。可能包含在给定的系统上,并且在任何有效的用例中,difference_type必须小于或等于最大元素数,即顺序容器中两个元素之间的距离永远不会大于顺序容器可以包含的最大元素数。有人可以举个例子说明两者之间有什么区别吗? 最佳答案 container::difference_type存在是因为对于某些序列容器,您可以减去迭代器。该减法

c++ - string.empty() 或 string.size() == 0 哪个更快?

最近,在一次讨论中,一位程序员同事要求我做一些代码更改。我有类似的东西:if(mystring.size()==0)//dosomethingelse//dosomethingelse讨论是关于使用mystring.empty()来验证字符串是否为空。现在,我同意可以说string.empty()是更冗长和可读的代码,但它有什么性能优势吗?我做了一些挖掘,发现了与我的问题有关的以下2个答案:Implementationfrombasic_string.hSOAnswerthatpointstoISOStandard-here这两个答案都支持我的说法,即string.empty()与st