- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里有一个代码不能用至少符合 c+++11 的编译器编译(在 godbolt 上试过):
#include <valarray>
#include <vector>
#include <iostream>
class Whatever {
public:
int sliceSum(const std::vector<int>& nums, int k) const {
std::valarray<int> data(nums.size());
for (int i = 0; i < nums.size(); ++i) {
data[i] = nums[i];
}
// Here we have St11slice_arrayIiE
std::cout << typeid(decltype(data[std::slice(0, k, 1)])).name() << std::endl;
return data[std::slice(0, k, 1)].sum();
}
};
class Matrix {
std::valarray<int> data;
int dim;
public:
Matrix(int r, int c) : data(r*c), dim(c) {}
int& operator()(int r, int c) {return data[r*dim + c];}
int trace() const {
// Here we have St5_ExprISt6_SClosISt9_ValArrayiEiE
std::cout << typeid(decltype(data[std::slice(0, dim, 1)])).name() << std::endl;
return data[std::slice(0, dim, 1)].sum();
}
};
int main()
{
Matrix m(3,3);
int n = 0;
for(int r=0; r<3; ++r)
for(int c=0; c<3; ++c)
m(r, c) = ++n;
Whatever s;
s.sliceSum({1,2,3}, 3);
m.trace();
}
类 Matrix
取自 https://en.cppreference.com/w/cpp/numeric/valarray/slice
和类 Whatever
是我的。
所以我不明白问题是什么以及为什么在两个相同(?)的情况下类型不同。
最佳答案
那是因为在 Matrix
情况下 data
是 const
(因为方法是 const
和 data
是成员),而在 Whatever
情况下 data
不是 const
(因为它在方法本身)。
如果您查看 operator[]
declarations对于 std::valarray
,您会看到它有两个接受切片参数的 operator[]
,一个 const
和一个不接受 常量
.
const
版本返回 std::valarray
,它有一个 sum
方法,non-const
返回 std::slice_array
,但不返回。
要解决此问题,请将结果包装在 std::valarray
中:
return std::valarray(data[std::slice(0, k, 1)]).sum();
关于c++ - 'sum' 中没有名为 'std::slice_array<int>' 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58679271/
int input[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::valarray test(input, sizeof(input)/sizeof(input
在 header ,定义了五个类模板:valarray , slice_array , gslice_array , mask_array和 indirect_array . 对于 valarray对
All overloads of assignment operators的std::slice_array都是const成员函数,但为什么要这样设计呢? 可能是因为 std::slice_array
我想知道为什么我不能比较some_valarray[first_slice] int main() { //Initialize valarray std::valarray val0{0,
这里有一个代码不能用至少符合 c+++11 的编译器编译(在 godbolt 上试过): #include #include #include class Whatever { public:
我有一个函数接受对 valarray 的 const 引用,我希望能够对数组进行切片并将切片传递给另一个需要 const slice_array 的函数。我知道我可以只使用 operator[] 和一
我是一名优秀的程序员,十分优秀!