标签: scalar

何时返回C++中的指针,标量和引用?

我正在从Java转向C++,并且对语言的灵活性感到有些困惑.有一点是存储对象的方法有三种:指针,引用和标量(如果我理解正确,则存储对象本身).

我倾向于尽可能使用引用,因为它尽可能接近Java.在某些情况下,例如派生属性的getter,这是不可能的:

MyType &MyClass::getSomeAttribute() {
    MyType t;
    return t;
}
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为t只存在于范围内,getSomeAttribute()并且如果我返回对它的引用,它将在客户端可以使用之前指出它.

因此,我有两个选择:

  1. 返回一个指针
  2. 返回一个标量

返回指针看起来像这样:

MyType *MyClass::getSomeAttribute() {
    MyType *t = new MyType;
    return t;
}
Run Code Online (Sandbox Code Playgroud)

这样做,但客户端必须检查此指针NULL才能确定,这是引用不必要的.另一个问题是调用者必须确保t解除分配,如果我可以避免它,我宁愿不处理它.

另一种方法是返回对象本身(标量):

MyType MyClass::getSomeAttribute() {
    MyType t;
    return t;
}
Run Code Online (Sandbox Code Playgroud)

这非常简单,正是我在这种情况下想要的东西:感觉就像一个引用,它不能为空.如果对象超出客户端代码的范围,则会将其删除.非常方便.但是,我很少看到有人这样做,这有什么原因吗?如果我返回标量而不是指针或引用,是否存在某种性能问题?

处理这个问题最常见/最优雅的方法是什么?

c++ scalar pointers reference

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

addScalar做什么?

JavaDoc说:

SQLQuery org.hibernate.SQLQuery.addScalar(String columnAlias, Type type)

Declare a scalar query result
Run Code Online (Sandbox Code Playgroud)

我知道executeScalarC#中有什么,但这个标量和C#标量似乎完全不同.

java sql scalar hibernate

30
推荐指数
2
解决办法
6万
查看次数

你能强制标量或数组引用成为Perl中的数组吗?

我有一个$results从服务返回的perl变量.该值应该是一个数组,$results应该是一个数组引用.但是,当数组中只有一个项目时,$results将设置为该值,而不是包含该项目的引用数组.

我想foreach在预期的数组上做一个循环.没有检查ref($results) eq 'ARRAY',是否有任何方法可以获得与以下内容相同的内容:

foreach my $result (@$results) {
    # Process $result
}
Run Code Online (Sandbox Code Playgroud)

该特定代码示例将用于参考,但会抱怨简单的标量.

编辑:我应该澄清,我无法更改从服务返回的内容.问题是当只有一个值时,该值将是一个标量,当有多个值时,它将是一个数组引用.

arrays perl scalar reference

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

警告:不能将标量值用作数组

我在执行状态脚本时看到以下错误:

Warning: Cannot use a scalar value as an array in 

$result[$array[$i*2]] = $array[$i*2+1];
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我已经包含以下完整代码:

<?php 

// Set the host and port 
$host = "ip_goes_here"; 
$port = port_goes_here; 

// Open the socket connection to the server 
$fp = fsockopen("udp://".$host, $port); 

// Set the string to send to the server 
$string = "\xff\xff\xff\xffgetinfo"; 

// Set the socket timeout to 2 seconds 
socket_set_timeout($fp, 2); 

// Actually send the string 
fwrite($fp, $string); 

// Read the first 18 bytes to get rid of the …
Run Code Online (Sandbox Code Playgroud)

php arrays scalar

16
推荐指数
1
解决办法
5万
查看次数

c#LINQ:如何检索单个结果

linq的新手,

什么是使用linq检索单个结果的最简单方法?

例如,我的查询

var query =
     from c in db.productInfo
     where c.flavor == "Classic Coke" && c.container == "Can"
     select c.co2Target;
Run Code Online (Sandbox Code Playgroud)

它应该只返回一个具有double值的字段.我怎么把它拉出查询?在过去,我使用过ExecuteScalar.我如何用linq做到这一点?我想保留其数据类型

更新:

这就是我现在的位置.问题是我在这里运行的测试查询返回4而不是3.75

var query =
                (from a in db.LUT_ProductInfos
                 where a.flavor == "Classic Coke" && a.Container == "Can"
                 select new { a.co2High }).Single();

            double MyVar = query.co2High.Value;
Run Code Online (Sandbox Code Playgroud)

c# linq scalar

15
推荐指数
4
解决办法
7万
查看次数

opencv:将Scalar转换为float或double类型

任何人都可以帮助我将标量类型的openCV转换为float或double等基本类型吗?

Scalar Sum1=sum(arg1),Sum2=sum(arg2);
theta.at<float>(i,j)=0.5*atan(Sum1/Sum2);
Run Code Online (Sandbox Code Playgroud)

我必须对Mat对象的所有元素arg1arg2(邻域和)求和,然后我必须执行它们的除法以在每个像素处找到方向场.我执行了总和,但由于我必须应用arctan函数,标量类型不适合.任何人都可以帮助我将标量类型转换为基本类型吗?

实际上我正在尝试应用log-gabor过滤器,到目前为止我所做的代码是:

//function to enhance fingerprint by log-gabor filter

void filter(Mat src, Mat finalImage)
{

//Sobel derivatives for orientation estimation

Mat grad_x,grad_y,grad2_x,grad2_y,fImage;
src.convertTo(fImage, CV_32F);

//1st and second order gradient

Sobel(fImage,grad_x,CV_32F,1,0,3);
Sobel(fImage,grad_y,CV_32F,0,1,3);    
Sobel(fImage,grad2_x,CV_32F,2,0,3);
Sobel(fImage,grad2_y,CV_32F,0,2,3);

//orientation estimation

Mat theta=Mat::zeros(fImage.size(),CV_32F);
Size block=Size(12,12);
copyMakeBorder(grad_x, grad_x, block.height/2, block.height/2,
               block.width/2,block.width/2 , BORDER_CONSTANT, Scalar::all(0));

copyMakeBorder(grad2_x, grad2_x, block.height/2, block.height/2,
               block.width/2,block.width/2 , BORDER_CONSTANT, Scalar::all(0));

copyMakeBorder(grad_y, grad_y, block.height/2, block.height/2,
               block.width/2,block.width/2 , BORDER_CONSTANT, Scalar::all(0));

copyMakeBorder(grad2_y, grad2_y, block.height/2, block.height/2,
               block.width/2,block.width/2 , BORDER_CONSTANT, Scalar::all(0));
Size …
Run Code Online (Sandbox Code Playgroud)

c scalar opencv

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

Opencv乘以标量和矩阵

我一直在努力实现一些非常微不足道的东西,而且在Matlab中是微不足道的.

我想简单地实现以下目标:

cv::Mat sample = [4 5 6; 4 2 5; 1 4 2];
sample = 5*sample;
Run Code Online (Sandbox Code Playgroud)

之后的样本应该是:

[20 24 30; 20 10 25; 5 20 10]
Run Code Online (Sandbox Code Playgroud)

我曾尝试scaleAdd,Mul,Multiply和既不允许标量乘法器及所需要的相同的"尺寸和类型"的矩阵.在这种情况下,我可以创建一个矩阵,然后使用scale参数,但这看起来非常无关紧要

任何直接简单的方法都会很棒!

scalar opencv matrix multiplication scale

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

我应该如何将单例数组转换为标量?

假设我有一个Array名为的变量p:

julia> p = [5]
julia> typeof(p)
Array{Int64,1}
Run Code Online (Sandbox Code Playgroud)

我应该如何将其转换为标量?p也可能是二维的:

julia> p = [1]'' 
julia> typeof(p)
Array{Int64,2}
Run Code Online (Sandbox Code Playgroud)

(注意:增加维度的双转置技巧可能在Julia的未来版本中不起作用)

通过适当的操作,我可以制作p任何尺寸,但我应该如何将其缩小为标量?


一种可行的方法是p=p[1],但如果p有多个元素,则不会抛出任何错误p; 所以,这对我没有好处.我可以构建自己的函数(带检查),

function scalar(x)
    assert(length(x) == 1)
    x[1]
end
Run Code Online (Sandbox Code Playgroud)

但它似乎必须重新发明轮子.

什么是行不通的squeeze,它只是剥离尺寸直到p是一个零维数组.

(与Julia相关:将1x1数组从内积转换为数字,但在这种情况下,与操作无关.)

arrays scalar julia

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

标量上下文中的列表赋值

标量上下文中的列表赋值返回右侧的元素数:

scalar(my ($hello, $there, $world) = (7,8)); #evaluates to 2
Run Code Online (Sandbox Code Playgroud)

为什么它评估右侧并生成2,而不是新定义的列表被评估并返回3?

对我来说,似乎$hello得到7,$there得到8,$world得到undef,然后该列表在标量上下文中进行评估,这将导致3,因为这是列表中元素的数量($hello $there $world).对我来说,上下文会影响返回计算表达式的哪一部分,这似乎很奇怪:

my $greeting = (($hello, $there, $world) = (7,8)); #2

my @greeting = (($hello, $there, $world) = (7,8));
my $greeting_length = @greeting; #3
Run Code Online (Sandbox Code Playgroud)

perl scalar list variable-assignment

12
推荐指数
2
解决办法
1848
查看次数

在标量上下文中评估Perl中的哈希的原因是什么?

我意识到在标量上下文中在Perl中计算数组是有用的:它会产生一些元素.

但是能够在标量上下文中评估哈希的实际用途是什么?例如

  • my $scalar_value = %hash;

  • scalar(%hash)

据我所知,它生成一个像" 3/4" 这样的字符串,提供有关散列内部的一些信息,这些信息似乎只对调试很有用.

perl hash scalar

10
推荐指数
1
解决办法
310
查看次数

标签 统计

scalar ×10

arrays ×3

perl ×3

opencv ×2

reference ×2

c ×1

c# ×1

c++ ×1

hash ×1

hibernate ×1

java ×1

julia ×1

linq ×1

list ×1

matrix ×1

multiplication ×1

php ×1

pointers ×1

scale ×1

sql ×1

variable-assignment ×1