当我将函数集成在不同的参数值时,我经常遇到如下错误:
lsoda-- warning..internal t (=r1) and h (=r2) are
such that in the machine, t + h = t on the next step
(h = step size). solver will continue anyway
Run Code Online (Sandbox Code Playgroud)
虽然我理解错误的技术方面,但我不知道如何抑制它被打印到stdout.我已经研究过numpy.seterr(),但是由于此错误消息似乎是从底层的C/Fortran代码生成的,因此它没有任何效果.虽然python script.py > /dev/null有效,但它显然也隐藏了可能打印的其他有用信息.
是否有某种方法可以禁用这些lsoda警告和错误,或以其他方式阻止它们被打印到stdout?
下面的代码用g ++ v4.8.1和输出45编译,但它的编译是否基于标准保证?其他编译器会抱怨吗?
#include <iostream>
#include <vector>
void test(const std::vector<int>& a, std::vector<int>& b) {
b[0] = 45;
}
int main() {
std::vector<int> v(1,0);
test(v, v);
std::cout << v[0] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我知道函数定义没有任何内在错误,但是当test使用相同的对象调用时v,我有点期待一个警告,即我将一个对象作为a const和非const引用传递.
当出现一些问题时,我正在研究一个带有非类型参数的模板函数(以避免数组的动态分配).我的第一个问题是编译时变量赋值.这是因为以下尝试调用模板函数:
template<int n>
int *getDegrees(int A[][n]) {
//return degrees
}
int main(int argc, char **argv) {
int n = 10;
int A[n][n];
int *degs = getDegrees<n>(A);
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们有两个错误:第一,编译器无法解析对以下内容的调用getDegrees(A):
main.cc:27: error: no matching function for call to ‘getDegrees(int [(((long unsigned int)(((long int)n) + -0x00000000000000001)) + 1)][(((long unsigned int)(((long int)n) + -0x00000000000000001)) + 1)])’
Run Code Online (Sandbox Code Playgroud)
其次,我们无法n在模板调用中使用,因为它不是常量表达式.简单地n保持不变可以解决问题
const int n = 10;
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做的话
int m = 10;
const int n = m;
Run Code Online (Sandbox Code Playgroud)
我们得到了同样的错误.虽然编译器可能允许第二个赋值,但它是否被认为是不好的形式?另外,为什么n在解决函数调用时不断有所作为呢?
我的另一个问题是关于vlas:在堆栈或堆上为它们分配的内存(并且这是依赖于编译器的)?即使在C++中允许它们似乎也存在争议,是否应该避免使用向量(或类似的容器)?
欣赏任何见解!