小编sep*_*p2k的帖子

Java foreach是否会创建副本?

我有一个关于这个foreach的问题:

    for(Element e : nullProof(setOfElements)){
            // do stuff
    }
Run Code Online (Sandbox Code Playgroud)

让我们假设我定义了函数nullProof来返回一个非null的Set(因为我听说你不应该将null传递给一个增强的for循环.这是真的吗?):

    private Set<Element> nullProof(Set<Element> s){
          return s == null ? Collections.<Element> emptySet() : s;
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是...... 在foreach中调用nullProof函数是否安全?具体来说,以下标题相当于:

    for(Element e : setOfElements){    //assuming setOfElements != null
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人可以指出一些Java标准,它说这是定义的行为.

此外,有人可以解释这个foreach被称为"幕后"实际发生的事情吗?

假设setOfElements的大小为6.对于通过setOfElements的每次迭代,JVM是否会查找setOfElements 6次,还是创建该组的副本并引用该副本?我试图理解这种行为.谢谢您的帮助!

java foreach jvm

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

strncpy_s使用G ++编译器

我最初使用Microsoft/visual c ++编译器编写了一个作业,但我的课程要求我使用G ++在unix上运行和编译

但是,strncpy_s不能使用g ++编译,我的特定程序的任何解决方法?

这是使用它的代码段:

void PhoneNumber::setName(const char name[])
{
    strncpy_s(_name, name, MAX_NAME_LENGTH);
}
Run Code Online (Sandbox Code Playgroud)

c++ g++ strncpy

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

无法使用指定的优化命名可执行文件

在编译我在linux上使用gcc编译器时编写的c代码时,我必须关闭优化.我发现我可以编译代码,但我只能在没有指定可执行文件名的情况下编译代码(默认为a.out).

这样可行:

gcc -O0 Problem04b.c
Run Code Online (Sandbox Code Playgroud)

但我的问题是我必须提交此作业,我无法提交名为a.out的可执行文件,因为我的教师需要知道它是哪个问题.我意识到我可能只是跑步

cp a.out Problem04b
Run Code Online (Sandbox Code Playgroud)

然后

rm a.out
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一种方法可以直接将代码编译成可执行的Problem04b.我试过像这样运行命令:

gcc -O0 Problem04b Problem04b.c
Run Code Online (Sandbox Code Playgroud)

但我没有运气.

谢谢你的帮助.

c optimization gcc

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

C和C++奇怪的性能差异

在您阅读我的帖子之前,请考虑到我是C和C++的新手.我主要是托管代码开发人员.

我有两段相同的代码(或者至少我相信).一个用C语言,一个用C++语言.代码基本上检查数字是否为素数,如果是,则将其存储在容器中.

C++

Main.cpp的

#include <iostream>
#include <vector>
#include <time.h>

static bool isPrime(const int& number) {

    if((number & 1) == 0) {
        if(number == 2)
            return true;
        else
            return false;
    }

    for(int i = 3; (i * i) <= number; i++) {

        if((number % i) == 0)
            return false;
    }

    return number != 1;
}

int main(int argc, const char * argv[]) {

    std::vector<int> vector;
    clock_t start = clock();
    for(int i = 0; i < 30000000; i++) {

        if(isPrime(i))
            vector.push_back(i); …
Run Code Online (Sandbox Code Playgroud)

c c++ performance benchmarking

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

for C++中的循环和性能关键应用程序

我正在尝试为性能关键应用程序编写快速C++代码,但我对编译器和编译器实现的了解有限.我目前正在使用gcc编译器.因此,我想知道在实践中是否存在写入的for循环之间的性能差异

//size is int argument

for( int i = 0; i < size; ++i )
{
    //code sequence C
}
Run Code Online (Sandbox Code Playgroud)

和写的for循环

//struct definition
struct s
{
    int size;

    //[...]
};

//[...]

//obj is reference of type s& (say)

for( int i = 0; i < obj.size; ++i )
{
    //code sequence C
}
Run Code Online (Sandbox Code Playgroud)

当然,在哪里,sizeobj.size采取相同(大!)的int价值.所以问题是:在实践中,查找obj.size比查找花费更多时间size.具有恒定大小变量的代码是否会更快?它是否依赖于代码C(如果C足够简单,编译器可能会确定size变量的值是否会发生变化......?!).因此,如果查找obj.size需要更多时间,那么编写是否可取

//obj is reference of type s& (say)

const int size …
Run Code Online (Sandbox Code Playgroud)

c++

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

我怎么知道我使用的是哪个版本的gcc编译器?

在java中,有命令行选项javac -version来了解计算机上安装的版本.我很想知道有没有办法知道gcc的版本或任何可以帮助我的命令行选项?

记住我不是在问C99,C11,C++ 11等语言标准.我问的是像gcc 4.9.2等编译器版本.

gcc version

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

GNU,GCC和MinGW有什么区别..他们不一样吗?

我被告知Gcc不仅是c的编译器,而且对于许多语言来说是真的吗?如果它是如何完成的

gcc

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

学习D时要使用哪个编译器?

我有兴趣学习D.然而我有点被DMD所转变,因为它不是完全开源的.这就是我考虑使用LDC的原因,但我不确定它的状态是什么.在debian包中它说:

Version: 1:0.14.0.dfsg-1     
LDC already compiles a lot of D code, but should still be considered beta quality. Take a look at the
     tickets to get a better impression on what still needs to be implemented. 
Run Code Online (Sandbox Code Playgroud)

我知道Debian存储库有时可能有点古老,但1.0.0似乎是最新的LDC版本.

我打算使用C语言编写的库.哪个编译器更适合这个目的?LDC还是DMD?我知道之前已经问过这个问题,但我发现的所有问题都比较陈旧,我想知道当前的状态.

d dmd ldc

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

堆栈上大小可变的数组

据我了解,在C和C ++中,我们创建在堆栈上大小在编译时已知的数据结构,并使用堆(malloc-free / new-delete)处理大小在编译时未知的数据,是在运行时决定的。为什么,我的g ++编译器允许我执行类似以下代码段的操作。

int main(void)
{
    int n ;
    cin >> n ; // get the size of array.
    int arr[n] ; // create a variable sized array.
    .... do other stuff ...
}
Run Code Online (Sandbox Code Playgroud)

具体来说,在数组的情况下:
数组在堆栈上分配了一个连续的内存块,并且在堆栈上上下都有变量,因此必须知道数组的大小,以便堆栈上数组上方的变量,数组本身以及堆栈上数组下方的变量都可以整齐地放入内存。那么如何在堆栈上实现可变大小的数组呢? 为什么甚至有必要?为什么我们不能仅将堆用于可变大小的缓冲区?

编辑:
我从评论中了解到,关于VLA是否为标准,C和C ++有不同的规则,而且尼尔·巴特沃思(Neil Butterworth)的评论指出,同时询问两种语言通常不是一个好主意。谢谢大家,因此我打算从问题中删除C标签,因为我打算主要询问C ++,这从代码片段语法可以明显看出。抱歉造成您的困惑,也感谢您的答复。

c++ arrays stack

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

在递归函数期间保持值

在Haskell中,我正在尝试解决一个问题,我需要一个接收整数列表的函数,并返回两个相邻数字的最大乘积.

示例:f [5,6,1,3,9]将返回30,即5和6的乘积

函数类型是这样的:

f :: [Int] -> Int
Run Code Online (Sandbox Code Playgroud)

我想解决这个问题,使用递归来迭代列表,得到2个头元素,其格式如下:(x1:x2:xs) 问题是如果当前产品比上一个产品大,我不知道如何保持产品价值比较.

有任何想法吗?

recursion haskell

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

标签 统计

c++ ×4

gcc ×3

c ×2

arrays ×1

benchmarking ×1

d ×1

dmd ×1

foreach ×1

g++ ×1

haskell ×1

java ×1

jvm ×1

ldc ×1

optimization ×1

performance ×1

recursion ×1

stack ×1

strncpy ×1

version ×1