小编use*_*516的帖子

cpp空数组声明

您好我有以下测试代码,我对cpp感到困惑.

  1. 如果你在library.h中声明一个带有空元素子句的数组..编译器会选择什么?它也没有抱怨,我使用Cygwin.

  2. 在library.cpp中我为两个元素赋值,是编译器假设一个元素有一个元素,我写第二个元素在数组范围之外?

library.h

#ifndef LIBRARY_H
#define LIBRARY_H

class library {

public:
    void print();
    char a[];
};

#endif
Run Code Online (Sandbox Code Playgroud)

library.cpp

#include <stdio.h>
#include "library.h"

void library::print() {
    a[0] = 'a';
    printf("1. element: %d\n", a[0]);
    a[1] = 'b';
    printf("2. element: %d\n", a[1]);
}
Run Code Online (Sandbox Code Playgroud)

client.cpp

#include <stdio.h>
#include "library.h"

void execute();
library l;

int main() {
    l = library();
    l.print();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Makefile文件

OPTIONS=-Wall

all: main

run: main
        ./main.exe

main: client.o library.o
        g++ $(OPTIONS) -o main $^

library.o: library.cpp library.h
        g++ $(OPTIONS) …
Run Code Online (Sandbox Code Playgroud)

c++

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

Perl如何在我的子例程中利用块参数(比如grep一样)

可以通过以下两种方式调用grep.我正好错过了一条信息来理解这块魔法.也许一个好的灵魂可以向我解释grep internal如何获取对块的引用并处理它甚至更好我如何编写使用bock表示法的子例程.

1)这是我认为的传统方式.grep EXPR,列表示例:@foo = grep(!/^#/, @bar); 2)这对我很好,但很神奇但很神奇.grep BLOCK LIST示例:@foo = grep {!/^#/} @bar;

提前谢谢了.

BR /赫尔曼

perl function block argument-passing

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

Perl共享变量的原子性和可见性

我从threads::shared描述中读到:

默认情况下,变量对每个线程都是私有的,每个新创建的线程都会获得每个现有变量的私有副本.此模块允许您跨不同的线程共享变量... (更多)

假设我有一个像这样的共享变量:

my $var :shared;
$var = 10;
Run Code Online (Sandbox Code Playgroud)

这意味着变量仅对我创建的所有线程存在一次.


现在关于原子性和可见性:

如果thread_A分配了一个新值,那么就说11:

$var = 11;
Run Code Online (Sandbox Code Playgroud)

是否保证thread_B(以及我可能创建的所有其他线程)都会看到值11?分配是原子地执行的吗?

或者我们是否首先在Java中获取锁定,然后执行赋值并释放锁定.并且只有使用相同锁的线程才能保证看到更新后的值?

或者这表现得像Java中的volatile原始变量?

java perl multithreading visibility atomicity

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

Perl如何将正则表达式传递给我的子程序,如grep

print grep /test/, "mytestphrase";
Run Code Online (Sandbox Code Playgroud)

使用 grep 语法,您可以传入不带引号的正则表达式。我希望我的子程序具有相同的行为,如下所示:

use strict; 
use warnings;

sub testsub {
    my $regex = shift;
    my $phrase = shift;

    print grep $regex, $phrase;
}

testsub /test/, "mytestphrase";
Run Code Online (Sandbox Code Playgroud)

但是它在 testsub 调用之前尝试$_对我的正则表达式进行评估,发出以下错误:

Use of uninitialized value $_ in pattern match (m//) at ./a.pl line 14.
Run Code Online (Sandbox Code Playgroud)

是否可以像 grep 命令一样调用 testsub 以及如何修改子例程以支持它?

regex parameters perl grep

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

Perl' - >'奇怪的符号

这个' - >'在下面的环境中做了什么,我不知道它意味着什么.这不是我们创建的对象,至少不是传统的new方法,也不能想象' - >'行是子程序调用的参数.

my $Interface = SOAP::Lite
  -> uri("urn:iControl:$name")
  -> readable(1)
  -> proxy("https://$sHost/iControl/iControlPortal.cgi");
Run Code Online (Sandbox Code Playgroud)

在使用Perl几年之后,我们不得不继续使用这个第一次看到的语法.

我很迷惑.

THX /赫尔曼

syntax perl

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

据说JLabel setText()方法是线程安全的,但它确保了可见性

查看JLabel的源代码我关注文本字段的可见性.我提取了必要部分来设置文本字段并检索oldValue.我认为如果String文本字段未声明为volatile,则可见性存在危险,因为firePropertyChange可能看不到之前由另一个线程保存的文本字段中检索到的oldValue.我是对的,还是我错过了什么?请注意,这不是讨论SwingUtility.

public class JLabel extends JComponent implements SwingConstants, Accessible {
    ...

    private String text = "";         // "" rather than null, for BeanBox

    ...

    public void setText(String text) {

        String oldAccessibleName = null;
        if (accessibleContext != null) {
            oldAccessibleName = accessibleContext.getAccessibleName();
        }

        String oldValue = this.text;
        this.text = text;
        firePropertyChange("text", oldValue, text);

    ...
Run Code Online (Sandbox Code Playgroud)

提前谢谢了.

java swing multithreading visibility volatile

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

为什么在我调用我的函数两次时glob会失败?

我有以下代码:

#! /usr/bin/perl

use strict; use warnings;
use Data::Dumper;

sub test {

        my $glob = glob("test?pl");
        print "glob [$glob]\n";
        $glob = glob("test?pl");
        print "glob [$glob]\n";
}

test();
test();
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到以下输出:

glob [test.pl]

glob [test.pl]

Use of uninitialized value $glob in concatenation (.) or string at ./test.pl line 9.

glob []

Use of uninitialized value $glob in concatenation (.) or string at ./test.pl line 11.

glob []
Run Code Online (Sandbox Code Playgroud)

为什么glob第二次调用test函数失败?我正在使用Perl 5.14.

perl glob

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