我不明白程序中出现分段错误的原因.代码可在此处获得
在第29行,我声明了一个PclImage变量,使用typedef定义,类似于struct数组.PclImage类型的定义如下(来自src/libMyKinect.h文件):
typedef struct {
int valid;
float x;
float y;
float z;
unsigned char blue;
unsigned char green;
unsigned char red;
} Point3d;
typedef Point3d PclImage[480][640];
Run Code Online (Sandbox Code Playgroud)
该程序运行良好,但当我声明一秒钟时PclImage,我一启动程序就会出现分段错误.
例如,如果在第一个文件的第30行,我添加PclImage bgPcl;程序立即崩溃.
谁能帮我?
我发现在Swift中声明变量的这些不同方法非常有趣:
// METHOD 1
var dogName: String = "Charlie"
// METHOD 2
var dogName: String {
return "Charlie"
}
// METHOD 3
let dogName = {
return "Charlie"
}
// METHOD 4
var dogName: String = {
return "Charlie"
}()
Run Code Online (Sandbox Code Playgroud)
显然方法3声明了一个让我们知道差异; 但为什么Swift允许方法4?
这四种方法有什么区别?
我在方法2和方法4之间特别混淆.另外,为什么方法3与方法4相比失去了最后的括号?
我有工作代码,但我试图理解为什么它的工作原理.我也想更多地了解Perl 5中(的内部perlbrew,perl-5.26.1,Cygwin x64).
我知道从perlvar与strict该use strict 'vars'作品由设置标志$^H.然后Perl ::根据这些标志测试对非变量的访问.不知怎的,既our和use vars标记变量,使他们通过测试.他们是怎么做到的?
例如:
perl -E 'package Foo;
use strict "vars";
use vars qw($foo);
say $foo;'
Run Code Online (Sandbox Code Playgroud)
运行正常(虽然它不产生输出).根据来源use vars,我尝试了这个,我认为会有同样的效果:
perl -E 'package Foo;
use strict "vars";
my $sym = "Foo::foo"; # <-- These two lines pulled straight
*$sym = \$$sym; # <-- from the source for the vars pragma
say $foo;'
Run Code Online (Sandbox Code Playgroud)
但是,它给了我一个错误: …
看看这个片段:
int a;
extern int b;
auto b = a;
Run Code Online (Sandbox Code Playgroud)
它结构良好吗?Clang成功编译了它,但是GCC和MSVC没有.
(当我回答如何声明和定义具有推导类型的静态成员时出现了这个问题?)
可在auto关键字被用作在C++ 11中的存储类说明?
以下代码在C++ 11中是否合法?
int main() {
auto int x;
}
Run Code Online (Sandbox Code Playgroud) 我已经完成了我的作业,并且一再保证,无论是在for循环内部还是外部声明变量,它在性能上都没有区别,它实际上编译为完全相同的MSIL.但是我一直在弄乱它,并发现在循环中移动变量声明确实会导致相当大的一致性能增益.
我编写了一个小型控制台测试类来测量这种效果.我初始化一个静态double[]数组项,两个方法对它执行循环操作,将结果写入静态double[]数组缓冲区.最初,我的方法是那些我注意到差异的方法,即复数的大小计算.对于长度为1000000 的项目数组运行这些100次,我得到的变量(6个double变量)在循环内的运行时间一直较低:例如,32,83±0,64 ms v 43,44±使用Intel Core 2 Duo @ 2.66 GHz的老式配置为0.45 ms.我尝试以不同的顺序执行它们,但它没有影响结果.
然后我意识到计算复数的大小远非最小的工作示例,并测试了两个更简单的方法:
static void Square1()
{
double x;
for (int i = 0; i < buffer.Length; i++) {
x = items[i];
buffer[i] = x * x;
}
}
static void Square2()
{
for (int i = 0; i < buffer.Length; i++) {
double x;
x = items[i];
buffer[i] = x * x;
}
}
Run Code Online (Sandbox Code Playgroud)
有了这些,结果就出现了另一种方式:在循环外声明变量似乎更有利:对于Square1() …
我的配置文件中有这样的结构:
<?php
if (true) {
$nonstatic = 1;
static $config = 1;
}
else {
$nonstatic = 2;
static $config = 2;
}
echo $nonstatic;
echo $config;
?>
Run Code Online (Sandbox Code Playgroud)
那么为什么$ config包含2如果该部分语句为false且$ nonstatic包含1?这是一个错误吗?
我很想知道声明变量和初始化变量之间的区别.例如
var example; // this is declaring
var example = "hi" // initializing? Or just "adding a value"?
Run Code Online (Sandbox Code Playgroud)
我不认为我就在那里,但每个人的定义究竟是什么?或者他们基本上是同一个意思?
使用letjavascript ES6 中变量声明的 new 关键字,我再也想不出使用var. 到目前为止,我一直在这样做,我没有看到使用letALL THE TIME 的任何缺点。
var今天使用的好理由是什么?let今天一直使用是一个好习惯吗?
my ($a, $b) = 33,44 # $a will be 33 and $b 44
Run Code Online (Sandbox Code Playgroud)
但是,如果您尝试在变量声明后分配值,则将以静默方式删除值
my ($a = 44, $b = 33);
say $a, $b; #OUTPUT: «(Any)(Any)?»
Run Code Online (Sandbox Code Playgroud)
从那以后它就变得更加怪异了
my ($a = 44, $b);
Run Code Online (Sandbox Code Playgroud)
失败了:
===SORRY!=== Error while compiling /tmp/G7JgLMe1Wq
Cannot put required parameter $b after optional parameters
Run Code Online (Sandbox Code Playgroud)
和
my ($a, $b = 33);
Run Code Online (Sandbox Code Playgroud)
将与将它们中的任何一个分配在一起具有相同的结果.
这种行为让我感到困惑.它应该发出警告吗?第一个表达式是否也会产生与可选参数相同的错误?我们应该将其记录为陷阱吗?上述所有的?