const int n=100; int *p=const_cast<int *>(&n); *p=234; 强制类型转换后为什么p没有修改原始n的数据
时间: 2024-02-12 16:03:16 浏览: 51
这是因为 `n` 是一个常量,被声明为 `const int` 类型,其值不能被修改。使用 `const_cast` 强制转换只是去掉了 `p` 的常量属性,但并没有真正地修改 `n` 的值。在试图更改 `n` 的值时,行为是未定义的,这意味着程序的行为是不可预测的。因此,应该避免在常量上使用 `const_cast`。
相关问题
下面强制类型转换,编译出错的为 () A.double a=0; int b=int(a); B.double a=0; int b=static_cast(a); C.const double a=0; int b=const_cast(a); D.const double a=0; double* ptr=const_cast(&a);
A. double a = 0; int b = int(a); //这行没有错误
B. double a = 0; int b = static_cast<int>(a); //正确写法
C. const double a = 0; int b = const_cast<int&>(a); //需要将const的引用才能进行const_cast
D. const double a = 0; double *ptr = const_cast<double*>(&a); //需要将const的指针进行const_cast
void NCut::GetPatchFeature(const MatrixXf &points, MatrixXf *features_in) { MatrixXf &features = *features_in; const int num_points = static_cast<int>(points.rows()); const int dim = _patch_size * _patch_size; features.resize(num_points, dim); for (int i = 0; i < num_points; ++i) { // .1 patch int irow = 0; int jcol = 0; _ff_feature_grid.Pos2d(points.coeffRef(i, 0), points.coeffRef(i, 1), &irow, &jcol); cv::Mat patch; cv::Point2f pt(static_cast<float>(irow), static_cast<float>(jcol)); cv::getRectSubPix(_cv_feature_map, cv::Size(_patch_size, _patch_size), pt, patch); // .2 maybe later i will add other features based on patch // .3 add to features assert(dim == patch.rows * patch.cols); int p = 0; for (int r = 0; r < patch.rows; ++r) { for (int c = 0; c < patch.cols; ++c) { float val = patch.at<float>(r, c); features.coeffRef(i, p++) = static_cast<float>( (std::isnan(val) || std::isinf(val)) ? 1.e-50 : val); // features.coeffRef(i, p++) = patch.at<float>(r, c); } } } }
这段代码是用于计算NCut算法中的图像块的特征向量。给定一个点集points,对于每个点,首先通过_ff_feature_grid将其映射到_feature_map图像上,并取该点为中心的_patch_size * _patch_size大小的矩形区域作为图像块。然后,对于每个图像块,将像素值添加到特征向量中,特征向量的维度为_patch_size * _patch_size。在添加每个像素值时,如果该值为NaN或Inf,则设置为1.e-50。最终,返回一个特征向量矩阵features,其行数为points中点的个数,列数为_patch_size * _patch_size。
阅读全文