小编Cri*_*ter的帖子

为什么不可能构建一个可以确定C++函数是否会改变特定变量值的编译器?

我在一本书中读到这一行:

实际上,构建一个能够实际确定C++函数是否会改变特定变量值的编译器是不可能的.

该段讨论了在检查const-ness时编译器保守的原因.

为什么不可能构建这样的编译器?

编译器总是可以检查是否重新分配了一个变量,是否正在调用一个非const函数,或者它是否作为非const参数传入...

c++ compiler-construction

104
推荐指数
8
解决办法
6811
查看次数

清空一个ArrayList或者只是创建一个新的ArrayList并将其旧的垃圾收集?

清空集合(在我的情况下是一个ArrayList)与创建一个新集合(并让垃圾收集器清除旧集合)的优点和缺点是什么.

具体来说,我有一个ArrayList<Rectangle>list.当某种情况发生时,我需要清空list并用其他内容重新填充.我是应该打电话list.clear()还是只是制作一个新的ArrayList<Rectangle>并让旧的垃圾收集?每种方法的优缺点是什么?

java collections garbage-collection arraylist

38
推荐指数
2
解决办法
3万
查看次数

为什么从构造函数中调用方法被认为是不好的做法?

在Java中,为什么从构造函数中调用方法被认为是不好的做法?如果这个方法计算量很大,那会特别糟糕吗?

java

22
推荐指数
2
解决办法
2万
查看次数

OpenCV如何在二进制图像中查找连接组件的列表

我正在使用OpenCV进行C++应用程序.我有一个8位二进制图像,有一些对象.对象全部为255,而背景中的所有内容都为0.每个对象内部没有空白(黑色)像素.换句话说,每个对象都是白色的.对象不相互连接.这是我想要从中提取的内容:

我想提取某种对象列表,我从中可以了解该列表中每个对象的位置.这可能是使用cvConnectedComponents()或其他任何东西.我需要指出每个对象在图像中的位置.这可以是基于某些计算的每个对象或中间或中心的边界矩形的形式,或者是给出我对图像中的对象位置的度量的任何东西.任何指向OpenCV函数的指针是什么?

c c++ opencv image computer-vision

14
推荐指数
2
解决办法
4万
查看次数

为什么C++ STL设置容器的count()方法如此命名?

它真正检查的是contains()而不是出现次数的计数,对吧?不允许重复,所以不包含()是一个比count()更好的名字?

c++ naming stl naming-conventions

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

是不是提供了明确的析构函数不好的做法?

如果我没有为C++类提供显式的析构函数,因为我确信编译器提供的默认析构函数是我所有类的需求,那很好吗?或者这被认为是不好的做法?

c++ destructor

6
推荐指数
2
解决办法
2621
查看次数

C++ STL设置实现

为什么C++集实现为二叉树而不是哈希集,与二叉树提供的O(log n)相比,它可以提供O(1)的平均大小写复杂度?

c++ algorithm stl data-structures

4
推荐指数
2
解决办法
6302
查看次数

我应该把C++ #include包含在哪里?在标题或实现中?

假设我在CameraVision.cpp文件中有一个名为CameraVision的类.

该类的构造函数接受一个向量IplImage*(IplImage是一个C结构,表示OpenCV中的图像).我需要在CameraVision.hpp或CameraVision.cpp中#include opencv.h.

哪个更好?为什么?(#在CameraVision.hpp或CameraVision.cpp中包含这些?)

另外,我应该在哪里#includeSTL <vector>,<iostream>等等?

假设CameraVision.cpp的客户端也使用<vector><iostream>.客户显然#include CameraVision.hpp(因为他是CameraVision的客户).CameraVision.cpp的客户是否也应该#include,<iostream>等等,如果他们已经#include进入了CameraVision.hpp?客户如何知道这一点?

c++ include

2
推荐指数
2
解决办法
688
查看次数

为什么Java必须抛出并发修改异常?

我想知道Java的迭代器.为什么它们被设计为抛出并发修改异常?在C++ STL中,您可以遍历容器并随意修改内容,但为什么不能在Java中执行此操作?

编辑:更正的问题.框架不正确.

c++ java iterator exception

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

内核如何检测内核空间段错误?

在 C 中,如果您尝试写入不属于您的内存,则可能发生的一种情况是段错误。(从技术上讲,当您尝试写入不属于您的内存时,行为是未定义的,但操作系统可以处理这种情况的方法之一是抛出段错误)。对于尝试非法内存访问的用户空间代码,内核是检测非法内存访问并抛出段错误的代码。

现在,我正在编写一个 Linux 内核模块。我的代码在内核空间中运行。我有两个相关的问题:

  1. 如果我超出数组范围,我的代码就会出现段错误。我想知道什么是检测这个段错误?对于用户空间应用程序,内核会检测段错误。内核代码本身呢?什么负责检测内核代码中的越界内存访问?

  2. 我编写的内核模块和 insmod 是否作为单独的进程运行?如果是,当我的模块出现段错误时,为什么整个内核都会出现段错误?为什么不只是我的模块段错误,而内核的其余部分继续运行?

我正在阅读本教程中的第 3.1.5 节:http : //www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html

c linux segmentation-fault linux-kernel

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

当vector作为reference-to-const传递时,C++向量迭代代码无法编译

我有以下for循环,它遍历一个传递给引用传递给const的向量

void PrintVector(const vector<string>& myVector) {
    for(vector<string>::iterator itr = myVector.begin(); itr != myVector.end(); ++itr)
        someFunctionThatTakesAPassByReferenceToConstParameter(itr);
}
Run Code Online (Sandbox Code Playgroud)

迭代器itr作为引用传递给函数someFunctionThatTakesAPassByReferenceToConstParameter().因此,可以保证此函数不会更改迭代器对象.即使这是有保证的,为什么代码不能编译?

编辑:我知道我可以使用const_iterator.但我想知道为什么这不编译.

c++ iterator vector

-2
推荐指数
1
解决办法
211
查看次数