标签: pass-by-reference

Java:如何通过引用传递byte []?

您可以使用关键字"ref"在.NET中执行此操作.有没有办法在Java中这样做?

java pass-by-reference

21
推荐指数
3
解决办法
5万
查看次数

Objective-C中引用的参数

我试图NSString通过引用传递,但它不起作用.

这是功能:

+(void)fileName:(NSString *) file
{
    file = @"folder_b";
}
Run Code Online (Sandbox Code Playgroud)

这就是电话:

NSString *file;

[function fileName:file];

nslog(@"%@",file);    // and there is nothing in the string....
Run Code Online (Sandbox Code Playgroud)

我必须做什么来通过引用传递我的字符串?

objective-c pass-by-reference

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


Go:无效操作 - 类型*map [key]值不支持索引

我正在尝试编写一个函数来修改由指针传递的原始地图,但Go不允许它.假设我有一张大地图,不想来回复制它.

使用传递值的代码正在工作,正在做我需要的但涉及传递值(playground):

package main

import "fmt"

type Currency string

type Amount struct {
    Currency Currency
    Value float32
}

type Balance map[Currency]float32

func (b Balance) Add(amount Amount) Balance {
    current, ok := b[amount.Currency]
    if ok {
        b[amount.Currency] = current + amount.Value
    } else {
        b[amount.Currency] = amount.Value
    }
    return b
}

func main() {
    b := Balance{Currency("USD"): 100.0}
    b = b.Add(Amount{Currency: Currency("USD"), Value: 5.0})

    fmt.Println("Balance: ", b)
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将参数传递为像这里的指针(playground):

func (b *Balance) Add(amount Amount) *Balance {
    current, …
Run Code Online (Sandbox Code Playgroud)

pass-by-reference go

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

从函数返回对象

我现在真的很困惑如何以及使用哪种方法从函数返回对象.我想要针对给定要求的解决方案提供一些反馈.

场景A:返回的对象将存储在一个变量中,该变量在其生命周期内无需修改.从而,

const Foo SomeClass::GetFoo() {
 return Foo(); 
}
Run Code Online (Sandbox Code Playgroud)

调用为:

someMethod() {
 const Foo& l_Foo = someClassPInstance->GetFoo();
//...
}
Run Code Online (Sandbox Code Playgroud)

Scneraio B:返回的对象将存储在一个变量中,该变量将在其生命周期内被修改.从而,

void SomeClass::GetFoo(Foo& a_Foo_ref) {
     a_Foo_ref = Foo(); 
    }
Run Code Online (Sandbox Code Playgroud)

调用为:

someMethod() {
 Foo l_Foo;
 someClassPInstance->GetFoo(l_Foo);
//...
}
Run Code Online (Sandbox Code Playgroud)

我在这里有一个问题:让我们说Foo不能有默认的构造函数.那么在这种情况下你会怎么处理呢,因为我们不能再写这个了:

Foo l_Foo
Run Code Online (Sandbox Code Playgroud)

场景C:

Foo SomeClass::GetFoo() {
 return Foo(); 
}
Run Code Online (Sandbox Code Playgroud)

调用为:

someMethod() {
 Foo l_Foo = someClassPInstance->GetFoo();
//...
}
Run Code Online (Sandbox Code Playgroud)

我认为这不是推荐的方法,因为它会导致构建额外的临时工.

你怎么看 ?另外,您是否建议使用更好的方法来处理此问题?

c++ memory return-value pass-by-reference

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

javascript中的范围很奇怪

在javascript中传递对象及其引用.意味着应该反映任何地方对象的变化.在这种情况下,console.log(a)的预期输出为{}

function change(a,b) {
    a.x = 'added';
    a = b;//assigning a as {} to b
}
a={}
b={}
change(a,b);
console.log(a); //expected {} but output {x:'added'}
console.log(b)
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?据我所知,这不应该是因为功能范围.谢谢

javascript scope function pass-by-reference

19
推荐指数
5
解决办法
1429
查看次数

是否应该通过const引用传递小的简单结构?

我一直被告知非原始类型应该通过const引用传递,而不是通过值传递,即:

void foo(std::string str);//bad
void foo(const std::string &str);//good
Run Code Online (Sandbox Code Playgroud)

但我今天在想,也许实际上一些简单的用户定义类型实际上可能更好地通过值传递,例如:

class Vector2
{
public:
    float x, y;
    ...constructors, operators overloads, utility methods, etc...
};

void foo(Vector2 pos);
void foo(const Vector2 &pos);//is this really better than by value?
void foo(float x, float y);//after all isn't by value effectively doing this?
Run Code Online (Sandbox Code Playgroud)

我的想法是,通过引用传递Vector2,它实际上比传递值更昂贵,因为编译器现在使用指针和解除引用访问const Vector2&pos版本?

是这样的吗?最简单的对象是否最符合价值?该线应该在哪里绘制?

c++ function pass-by-reference user-defined-types

18
推荐指数
1
解决办法
3458
查看次数

返回代码或输出参数?

我正在制作一个从服务器获取文件名列表的方法,但我遇到了一个我无法回答的问题.

该方法返回两件事:

  • 一个SftpResult是与各种的返回代码的枚举.
  • 文件名列表.

在这三个签名中:

public static ArrayList GetFileList(string directory, out SftpResult result)

public static SftpResult GetFileList(string directory, out ArrayList fileNames)

public static SftpFileListResult GetFileList(string directory)

(其中SftpFileListResult是an SftpResult和an 的复合对象ArrayList)

这是首选,为什么?

c# pass-by-reference

18
推荐指数
2
解决办法
766
查看次数

Cython和C++:通过引用传递

我是Cython和C++的菜鸟,所以我对论证传递有一个问题.我想避免在以下场景中传递参数的副本:

# somefile.pyx
#distutils: language = c++
from libcpp.vector cimport vector

def add_one(vector[int] vect):
    cdef int i
    n = vect.size()
    for i in range(n):
        vect[i] += 1

cdef vector[int] v
for i in range(100000):
    v.push_back(i)
add_one(v) # <-- ??
Run Code Online (Sandbox Code Playgroud)

我希望该方法add_one只是修改v"就地".我相信在C++中,你可以通过预先挂起参数来实现这一点&,这意味着对指针的任何更改都会传递给指针.这样,您不必担心传递指针或实际对象,即

add_one(v); # in c++
Run Code Online (Sandbox Code Playgroud)

我可以在Cython中做同样的事情,还是我必须明确地将arg类型更改为引用,即def add_one(vector[int]* vect)

c++ python reference pass-by-reference cython

18
推荐指数
1
解决办法
7758
查看次数

C#是通过引用还是作为副本将List <T>传递给方法?

从C/C++迈出C#世界的第一步,细节上有点模糊.据我所知,类默认通过引用传递,但是例如.列出<string>,如:

void DoStuff(List<string> strs)
{
    //do stuff with the list of strings
}
Run Code Online (Sandbox Code Playgroud)

和其他地方

List<string> sl = new List<string>();
//next fill list in a loop etc. and then do stuff with it:
DoStuff(sl);
Run Code Online (Sandbox Code Playgroud)

SL在这种情况下按引用传递或者是副本上进行,这样我需要重新定义,如工人功能

void DoStuff(ref List<string> strs)
实际上是对sl本身采取行动而不是副本?

c# pass-by-reference pass-by-value

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