相关疑难解决方法(0)

C++中的" - >"运算符是什么?

看完后隐藏功能和C++/STL的暗角comp.lang.c++.moderated,我完全惊讶的是,下面的代码片断编译并在两个Visual Studio 2008和G ++ 4.4的工作.

这是代码:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x --> 0) // x goes to 0
    {
        printf("%d ", x);
    }
}
Run Code Online (Sandbox Code Playgroud)

我假设这是C,因为它也适用于GCC.标准中定义了哪里,它来自何处?

c++ code-formatting standards-compliance operators

8590
推荐指数
27
解决办法
75万
查看次数

'size_t'vs'container :: size_type'

是否有之间的差异size_tcontainer::size_type

我所理解的size_t是更通用的,可以用于任何size_types.

但是container::size_type针对特定种类的容器进行了优化?

c++ size-type container-data-type

100
推荐指数
3
解决办法
4万
查看次数

你是否总是对C中的数字使用'int',即使它们是非负数?

我总是使用unsigned int来表示永远不应该是负数的值.但是今天我在代码中发现了这种情况:

void CreateRequestHeader( unsigned bitsAvailable, unsigned mandatoryDataSize, 
    unsigned optionalDataSize )
{
    If ( bitsAvailable – mandatoryDataSize >= optionalDataSize ) {
        // Optional data fits, so add it to the header.
    }

    // BUG! The above includes the optional part even if
    // mandatoryDataSize > bitsAvailable.
}
Run Code Online (Sandbox Code Playgroud)

我应该开始使用int而不是unsigned int来表示数字,即使它们不能为负数吗?

c coding-style

46
推荐指数
8
解决办法
1万
查看次数

我应该将allocator作为函数参数传递吗?(我对分配器的误解)

在我allocator通过阅读一些文章
(cppreference我们内存不足)来研究几天之后,
我对如何控制数据结构以某种方式分配内存感到困惑.

我很确定我误解了一些东西,
所以我将把剩下的问题分成很多部分,以便让我的错误更容易被引用.

这是我(错误)理解的: -

片段

假设这B::generateCs()是一个C从列表中生成列表的函数CPrototype.
B::generateCs()被使用B()的构造函数: -

class C          {/*some trivial code*/};
class CPrototype {/*some trivial code*/};
class B {
    public: 
    std::vector<C> generateCs() {  
        std::vector<CPrototype> prototypes = getPrototypes();
        std::vector<C> result;                     //#X
        for(std::size_t n=0; n < prototypes.size(); n++) {
            //construct real object  (CPrototype->C)
            result.push_back( makeItBorn(prototypes[n]) ); 
        }
        return result;
    }
    std::vector<C> bField;    //#Y
    B() {
        this->bField = generateCs();    //#Y …
Run Code Online (Sandbox Code Playgroud)

c++ memory memory-management allocation c++11

15
推荐指数
1
解决办法
1382
查看次数

C++,最佳实践,int或size_t?

可能重复:
何时使用std :: size_t?

你好.

假设使用模式相同(即没有负数),最好用于各种索引,int或者size_t输入?

两者之间64位英特尔的体验是否存在性能差异?

谢谢

c++ performance

7
推荐指数
3
解决办法
8768
查看次数

在整个地方使用std :: size_t是一种好习惯吗?

可能重复:
何时使用std :: size_t?

我的代码中有很多常量是无符号数,例如计数器,频率截止,长度等.我开始使用std::size_t所有这些,而不是intunsigned int.

这是正确的做法吗?我开始它是因为STL容器使用它的大小,它用于字符串位置等.

c++ variables types

6
推荐指数
1
解决办法
806
查看次数

C++ - 你应该使用常规数组size_t吗?

我很困惑size_t.我知道这是一个未签名的类型..正确吗?我的问题是,何时应该使用它.是否有理由将它与常规数组一起使用?我的意思是必须声明数组大小真的很大,如此巨大,以至于常规的无符号或有符号无法处理它.然后一个size_t人能够处理它吗?有人能举个例子吗?

c++ arrays size-t

6
推荐指数
1
解决办法
1072
查看次数

size_t和内存分配

有这样一种类型std::size_t.它可以用于描述对象的大小,因为它可以保证能够表达任何对象的最大大小(因此在这里写).但是,这是什么意思?我们实际上没有内存中的对象.那么这是否意味着这种类型可以存储一个整数,代表我们理论上可以使用的最大内存量?

如果我尝试写类似的东西

size_t maxSize = std::numeric_limits<std::size_t>::max();
new char[maxSize];
Run Code Online (Sandbox Code Playgroud)

我会得到一个错误,因为数组的总大小限制为0x7fffffff.为什么?而且,如果我传递一个等于的非常量表达式maxSize,std::bad_array_new_length将被抛出.如果我传递的表达式小于maxSize但仍然大于0x7fffffff,std::bad_alloc则会抛出.我想这std::bad_alloc是因为内存不足而引发的,不是因为大小大于0x7fffffff.为什么会这样?我想如果我们分配的内存大小大于0x7fffffff(这是在编译时传递给new []的const的最大值),抛出一个特殊异常是很自然的.为什么std::bad_array_new_length只有在我通过时才被抛出maxSize?这种情况特别吗?

顺便说一下,如果我将maxSize传递给vector的构造函数,如下所示:

vector<char> vec(maxSize);
Run Code Online (Sandbox Code Playgroud)

std::bad_alloc将被抛出,而不是std::bad_array_new_length.这是否意味着vector使用不同的分配器?

我正在尝试自己实现数组.使用unsigned int来存储大小,容量和索引是一种糟糕的方法.所以定义一些这样的别名是个好主意:

typedef std::size_t size_type;
Run Code Online (Sandbox Code Playgroud)

size_type而不是unsigned int

c++ memory-management c++11

6
推荐指数
1
解决办法
891
查看次数

当索引不是整数常量表达式时,不要使用数组下标; 使用gsl :: at()代替

我试图在Microsoft Visual Studio中创建一些示例代码

int main()
{
    const size_t size = 10;
    int arr[size];

    for (size_t i = 0; i < size; ++i)
        arr[i] = i;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在JetBrains ResharperC++发出以下警告 arr[i] = i;

在此输入图像描述 当索引不是整数常量表达式时,不要使用数组下标; 使用gsl :: at()代替

我无法理解这意味着什么以及如何解决此警告.

由于这是我经常使用的方案,我有点担心警告.

任何人都可以建议或指出我正确的方向吗?

编辑:将循环更改为:

for (size_t i = 0; i < size; ++i)
    arr[i] = 0;
Run Code Online (Sandbox Code Playgroud)

仍然会发出警告.

c++ resharper-c++ cpp-core-guidelines

6
推荐指数
1
解决办法
1181
查看次数

如何实现自己的函数到std :: vector?

我想添加一个函数,它将.size()值作为整数返回,而不是无符号整数.

编辑:由于评论,我解释更详细:

我有代码:

int something = 3;
if(arr.size() > something) 
Run Code Online (Sandbox Code Playgroud)

这将产生编译器警告,我不喜欢添加(int)到我拥有它的每个地方.所以,我认为使用sizei()函数会很好的解决方案:

int something = 3;
if(arr.sizei() > something) 
Run Code Online (Sandbox Code Playgroud)

哪个不会产生警告.

所以,我不想创建一个单独的函数,而是std :: vector本身的一个函数.

编辑:似乎这样做的唯一方法是创建另一个函数,例如:

template <typename T>
inline int sizei(const T &arr){
    return (int)arr.size();
}
Run Code Online (Sandbox Code Playgroud)

从积极的方面来看:这似乎根本不会增加我的可执行文件大小.

c++ std

1
推荐指数
1
解决办法
1735
查看次数