您好我有以下测试代码,我对cpp感到困惑.
如果你在library.h中声明一个带有空元素子句的数组..编译器会选择什么?它也没有抱怨,我使用Cygwin.
在library.cpp中我为两个元素赋值,是编译器假设一个元素有一个元素,我写第二个元素在数组范围之外?
#ifndef LIBRARY_H
#define LIBRARY_H
class library {
public:
void print();
char a[];
};
#endif
Run Code Online (Sandbox Code Playgroud)
#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)
#include <stdio.h>
#include "library.h"
void execute();
library l;
int main() {
l = library();
l.print();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
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) 可以通过以下两种方式调用grep.我正好错过了一条信息来理解这块魔法.也许一个好的灵魂可以向我解释grep internal如何获取对块的引用并处理它甚至更好我如何编写使用bock表示法的子例程.
1)这是我认为的传统方式.grep EXPR,列表示例:@foo = grep(!/^#/, @bar);
2)这对我很好,但很神奇但很神奇.grep BLOCK LIST示例:@foo = grep {!/^#/} @bar;
提前谢谢了.
BR /赫尔曼
我从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原始变量?
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 以及如何修改子例程以支持它?
这个' - >'在下面的环境中做了什么,我不知道它意味着什么.这不是我们创建的对象,至少不是传统的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 /赫尔曼
查看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)
提前谢谢了.
我有以下代码:
#! /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.