相关疑难解决方法(0)

C++和动态类型语言

今天我和一位朋友讨论了静态和动态类型语言之间的差异(有关静态和动态类型语言在这个SO问题中的区别的更多信息).之后,我想知道在C++中可以使用什么样的技巧来模拟这种动态行为.

在C++中,与其他静态类型语言一样,变量类型在编译时指定.例如,假设我必须从文件中读取大量数字,这些数字在大多数情况下非常小,足够小以适应unsigned short类型.这是一个棘手的问题,少量的这些值要大得多,大到足以需要unsigned long long存储.

由于我假设我要对所有这些进行计算,我希望它们都以相同的顺序存储在相同容器中的相同容器中,而不是从输入文件中读取它们..天真的方法是将它们存储在一个vector类型中unsigned long long,但这意味着通常最多需要4倍于实际需要的空间(unsigned short2个字节,unsigned long long8个字节).

在动态类型语言中,变量的类型在运行时被解释并被强制转换为适合的类型.如何在C++中实现类似的功能?

我的第一个想法是通过指针来做,根据它的大小我会用适当的类型存储数字.这有一个明显的缺点,即必须存储指针,但是因为我认为我还是要将它们存储在堆中,我认为这不重要.

我完全相信你们中的许多人能给我提供比这更好的解决方案......

#include <iostream>
#include <vector>
#include <limits>
#include <sstream>
#include <fstream>

int main() {
    std::ifstream f ("input_file");
    if (f.is_open()) {
        std::vector<void*> v;
        unsigned long long int num;
        while(f >> num) {
            if (num > std::numeric_limits<unsigned short>::max()) {
                v.push_back(new unsigned long long int(num));
            }
            else …
Run Code Online (Sandbox Code Playgroud)

c++ types valgrind programming-languages c++11

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

Java泛型方法不起作用 - 参数不受限制

说我有这个代码:

class Demo
{
    static <T> T pick(T a1, T a2)
    {
        return a2;
    }

    public static void main(String[] args)
    {
        pick("d", 123);
    }
}
Run Code Online (Sandbox Code Playgroud)

从我所学到的,似乎我已经说过两个参数a1,a2并且返回类型pick必须在同一个泛型类型下T.

那么,为什么编译器让我传递StringIntegerpick

java generics

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

我将double转换为int,但仍有错误,解释原因?

    int x1, x2; double d;
    d = (int)(Math.sqrt(b*b - 4*a*c));
    if (d >= 0) {
        x1 = (-b + d) / 2*a;    // on this line 
Run Code Online (Sandbox Code Playgroud)

"类型不匹配:无法从double转换为int"

java double int compiler-errors

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

整数或双精度1.0和1

我想读取一个双精度数字并确定输入是Integer还是double。问题是当我输入1.00(是双精度)时,我得到的结果是整数

double a;
cin >> a;
if (a == int(a))
    cout << "Integer";
else
    cout << "Double";
Run Code Online (Sandbox Code Playgroud)

c++

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