小编Bjo*_*ren的帖子

以标准方式在源中指示C++标准

符合标准的C++编译器定义了一个__cplusplus宏,可以在预处理期间检查该宏以确定正在编译文件的标准,例如:

#if __cplusplus < 201103L
#error "You need a C++11 compliant compiler."
#endif

#include <iostream>
#include <vector>

int main(){
    std::vector<int> v {1, 2, 3};
    for (auto i : v){
        std::cout << i << " ";
    }
    std::cout << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 是否有标准方法来指示应该使用哪个标准编译源文件?

这将允许构建工具在编译之前检查源,以确定适当的参数-std=(参见 shebang,它可以指示脚本语言/版本:) #!/usr/bin/env python3.

我能想到的非标准和脆弱的方法是寻找预处理器检查__cplusplus但在上面的例子中我也可以写:

#if __cplusplus <= 199711L
#error "You need a C++11 compliant compiler."
#endif
Run Code Online (Sandbox Code Playgroud)

因此,编写例如正则表达式会变得非常棘手以捕捉所有变化.

编辑:

虽然我同情@Gary的答案,建议依赖于构建系统,但它假设我们实际上将有一个构建步骤. …

c++ compilation c++11

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

python:更改符号变量并分配数值

为了计算导数和其他表达式,我使用了 sympy 包并说T = sy.Symbol('T')现在我已经计算了正确的表达式:

E= -T**2*F_deriv_T(T,rho)
Run Code Online (Sandbox Code Playgroud)

在哪里

def F_deriv_rho(T,rho):
    ret = 0
    for n in range(5):
        for m in range(4):
            inner= c[n,m]*g_rho_deriv_rho_np*g_T_np
        ret += inner
    return ret
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

F_deriv_rho: [0.0 7.76971e-5*T 0.0001553942*T**2*rho T*(-5.14488e-5*log(rho) - 5.14488e-5)*log(T) + T*(1.22574e-5*log(rho)+1.22574e-5)*log(T) + T*(1.89488e-5*log(rho) + 1.89488e-5)*log(T) + T(2.29441e-5*log(rho) + 2.29441e-5)*log(T) + T*(7.49956e-5*log(rho) + 7.49956e-5)*log(T) T**2*(-0.0001028976*rho*log(rho) - 5.14488e-5*rho)*log(T) + T**2*(2.45148e-5*rho*log(rho) + 1.22574e-5*rho)*log(T) + T**2*(3.78976e-5*rho*log(rho) + 1.89488e-5*rho)*log(T) + T**2*(4.58882e-5*rho*log(rho) + 2.29441e-5*rho)*log(T) + T**2*(0.0001499912*rho*log(rho) + 7.49956e 5*rho)*log(T)]

使用python我想将T(和rho)作为一个符号更改为一个值。我怎么能那样做?

因此,我想创建 10 个类似的数字,T_def = np.arange(2000, 10000, …

python variables symbols sympy

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

标签 统计

c++ ×1

c++11 ×1

compilation ×1

python ×1

symbols ×1

sympy ×1

variables ×1