小编jua*_*nza的帖子

java中的`new`关键字是多余的?

我来自C++,所以有一个我不太了解的java特性.我已经读过必须使用关键字创建所有对象new,但基元除外.现在,如果编译器可以识别基本类型,并且不允许您创建一个没有调用其构造函数的对象new,那么拥有该关键字的原因是什么new?有人可以提供两行代码的例子,除了存在new,编译和具有不同的含义/结果相同吗?

只是为了澄清多余的意思,希望能让我的问题更加清晰.不new添加任何东西?语言是否可以在没有new通过构造函数实例化对象的情况下表达?

java

25
推荐指数
3
解决办法
3866
查看次数

std :: array <int,10>作为类成员进行了零初始化吗?

struct MyClass
{
  std::array<int, 10> stdArr;

  MyClass() : stdArr()
  {}
};

MyClass c;
Run Code Online (Sandbox Code Playgroud)

问题:

  1. c.stdArr零初始化?
  2. 如果是 - 为什么?

我自己的矛盾答案:

  1. 它是零初始化的: std::array希望表现得像一个c-array.如果在上面的例子中stdArr是一个c-array,它将stdArr()在初始化列表中进行零初始化.我希望member()在初始化列表中写入初始化对象.

  2. 它不是零初始化的:

    • std::array 通常只有一个成员,在我的情况下 int[10] _Elems;
    • 通常基本类型和基本类型的数组int[N]都不是默认初始化的.
    • std::array 是一种聚合类型,暗示它是默认构造的.
    • 因为没有自定义构造函数初始化_Elems,我认为它不是零初始化.

std::array根据C++ 11标准,正确的行为是什么?

c++ c++11 stdarray

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

从boost :: optional中检索对象

假设一个方法返回这样的东西

boost::optional<SomeClass> SomeMethod()
{...}
Run Code Online (Sandbox Code Playgroud)

现在假设我有类似的东西

boost::optional<SomeClass> val = SomeMethod();
Run Code Online (Sandbox Code Playgroud)

现在我的问题是如何从val中提取SomeClass?

所以我可以这样做:

SomeClass sc = val ?
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-optional

20
推荐指数
3
解决办法
2万
查看次数

为什么std :: equal_to会导致动态分配?

考虑以下简单示例,我用它std::equal_to来比较两个std::pair<std::string, unsigned>.它operator new被重载,以便在分配时打印一条消息(此处为实时代码):

#include <functional>
#include <string>
#include <iostream>

// overloaded to see when heap allocations take place
void* operator new(std::size_t n)
{
    std::cout << "Allocating " << n << std::endl;
    return malloc(n);
}

int main()
{
    using key_type = std::pair<std::string, unsigned>;
    auto key1 = std::make_pair(std::string("a_______long______string______"), 1);
    auto key2 = std::make_pair(std::string("a_______long______string______"), 1);

    std::cout << "Finished initial allocations\n\n" << std::endl;

    std::equal_to<key_type> eq;
    eq(key1, key2); // how can this cause dynamic allocation???
}
Run Code Online (Sandbox Code Playgroud)

我看到的信息是 …

c++ heap-memory std-pair

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

在不使用指针的情况下,在C++中返回"无效值"类型的正确方法是什么?

我经常-1在从函数返回时使用无效值类型,其中输入产生不正确的输出.例如,-1可以返回索引超出范围而不是抛出异常的索引函数.但是当编写具有负值的函数作为可能的返回类型时,此技术不起作用.在这种情况下返回无效类型值的正确方法是什么?

我主要使用的技术是将返回类型设置为类型*int,并返回指针NULL.但是,这要求所有返回值都是指针类型,这似乎是函数的额外开销.在这种情况下,是否有可接受的返回值标准?

c++ pointers return-value

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

如何回忆**kwargs?

我还没有看到一种既定的方法来记忆一个带有关键字参数的函数,即类型的东西

def f(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

因为通常一个memoizer有一个dict缓存给定输入参数集的结果,并且kwargs是一个dict因此不可用的.我在这里讨论后尝试过使用

(args, frozenset(kwargs.items()))
Run Code Online (Sandbox Code Playgroud)

作为缓存的关键dict,但这仅在值为kwargshashable 时才有效.此外,正如下面的答案中所指出的那样,frozenset它不是有序的数据结构.因此,此解决方案可能更安全:

(args, tuple(sorted(kwargs.items())))
Run Code Online (Sandbox Code Playgroud)

但它仍然无法应对不可清除的元素.我所看到的另一种方法是使用string的表示kwargs在缓存中的关键:

(args, str(sorted(kwargs.items())))
Run Code Online (Sandbox Code Playgroud)

我看到的唯一缺点是散列可能非常长的字符串的开销.据我所知,结果应该是正确的.有人能发现后一种方法有什么问题吗?下面的答案之一指出,这假定了关键字参数值的函数__str____repr__函数的某些行为.这似乎是一个显示阻止.

还有另一种更成熟的实现备忘的方法,可以应对**kwargs和不可消除的论证价值吗?

python memoization

18
推荐指数
2
解决办法
4089
查看次数

C++复数,什么是正确的格式?

我想使用复杂数字的C++.因此我包括在内#include <complex>.现在我的问题是:如何声明一个变量?(那么调用的格式是什么1 + i呢?)

提前致谢 :-)

c++ numbers number-formatting

16
推荐指数
4
解决办法
3万
查看次数

'sqrt'不是'std'的成员

我在linux中编译我的程序 - 它有以下几行:

std::sqrt((double)num);
Run Code Online (Sandbox Code Playgroud)

在Windows上没关系,但是在linux上我得到'sqrt'不是'std'的成员我有一个包括math.h

有什么问题吗?

c++ math std sqrt

15
推荐指数
2
解决办法
3万
查看次数

矢量走出界限而不给出错误

我有一个std::vector.我检查它的大小是6,但是当我尝试访问vec[6]以检查它是否会出错时,我得到的不是错误而是一些数字.它不应该出错吗?

编辑:类似于:

struct Element
{
    std::vector<double> face;
};

int main()
{
    Element elm;

    .... // insert 6 elements into elm.face

    std::cout << elm.face.size() << std::endl; // answer is 6
    std::cout << elm.face[6] << std::endl; // answer is some number
}
Run Code Online (Sandbox Code Playgroud)

c++ stdvector

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

为什么字符串文字是常量?

众所周知,在C++中,字符串文字是不可变的,修改字符串文字的结果是未定义的.例如

char * str = "Hello!";
str[1] = 'a';
Run Code Online (Sandbox Code Playgroud)

这将带来不确定的行为.

除了字符串文字放在静态内存中.因此它们存在于整个程序中.我想知道为什么字符串文字有这样的属性.

c++ string const literals

13
推荐指数
2
解决办法
3067
查看次数