小编phu*_*ehe的帖子

如何在C++中"返回一个对象"?

我知道标题听起来很熟悉,因为有很多类似的问题,但我要问问题的不同方面(我知道在堆栈上放置东西并将它们放在堆上之间的区别).

在Java中,我总是可以返回对"本地"对象的引用

public Thing calculateThing() {
    Thing thing = new Thing();
    // do calculations and modify thing
    return thing;
}
Run Code Online (Sandbox Code Playgroud)

在C++中,要做类似的事情,我有2个选项

(1)每当我需要"返回"一个对象时,我都可以使用引用

void calculateThing(Thing& thing) {
    // do calculations and modify thing
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

Thing thing;
calculateThing(thing);
Run Code Online (Sandbox Code Playgroud)

(2)或者我可以返回指向动态分配对象的指针

Thing* calculateThing() {
    Thing* thing(new Thing());
    // do calculations and modify thing
    return thing;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

Thing* thing = calculateThing();
delete thing;
Run Code Online (Sandbox Code Playgroud)

使用第一种方法我不必手动释放内存,但对我而言,它使代码难以阅读.第二种方法的问题是,我必须记住delete thing;,这看起来不太好.我不想返回复制的值,因为它效率低(我认为),所以这里提出问题

  • 是否有第三种解决方案(不需要复制值)?
  • 如果我坚持第一个解决方案,有什么问题吗?
  • 何时以及为什么要使用第二种解决方案?

c++ performance return reference

155
推荐指数
5
解决办法
8万
查看次数

显示和关闭模态视图控制器

任何人都可以给我示例代码,我可以用来首先提出一个模态视图控制器,然后解雇它?这就是我一直在尝试的:

    NSLog(@"%@", blue.modalViewController);
    [blue presentModalViewController:red animated:YES];
    NSLog(@"%@", blue.modalViewController);
    [blue dismissModalViewControllerAnimated:YES];
    NSLog(@"%@", blue.modalViewController);
此代码位于viewDidLoad中("blue"和"red"都是UIViewController的子类).我希望我会显示红色视图然后立即隐藏它,并带有一些动画.但是这段代码只提供了模态视图,并没有忽略它.任何的想法?第一个日志显示"null",而另外两个日志显示<RedViewController:0x3d21bf0>
另一点是,如果我将此代码放在applicationDidFinishLaunching中:红色视图根本不显示,并且所有日志都为"null"

objective-c uiviewcontroller modal-view ios

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

UITextField焦点

如何以编程方式将焦点分配给视图中的特定UITextField?我有几个字段,在视图显示上,我想将光标放在特定字段上,而不是顶部的第一个字段.

iphone textinput

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

bash/zsh脚本中"case"语句的奇怪语法是什么原因?

从程序员的角度来看,shell脚本只是另一种编程语言,人们必须学习并遵守语言规则.但是,我必须承认,这种语法是我在一种常用语言中见过的最奇怪的风格.shell是否采用了它来自的较旧语言的语法?语法中是否有特殊含义/含义?

作为一个例子,这里是我从SO上的另一篇文章中获取的一个小片段

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        check_status
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
Run Code Online (Sandbox Code Playgroud)

看看这个,首先我可以看到case结束esac,这是它的反转形式(如if结束fi).其次,我理解每个案例后面跟着一个).很公平,但为什么我;在每个声明的末尾都需要两个呢?我还会说)没有伴随的(是丑陋的.

我正在寻找有关语言历史方面的更多信息,但我也是出于技术原因而开放.

bash shell zsh case

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

在jscrollpane中禁用水平滚动

我有一个JScrollPaneFlowLayout我希望有一个固定的宽度.它应该只是垂直滚动,当我调整窗口大小时应该自动重新排列内容.我认为应该有一种方法,setEnableHorizontalScroll(false)但找不到它.

有没有简单的方法来做到这一点?

java swing jscrollpane horizontal-scrolling

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

如何对同一个git修订版应用两个补丁?

这是一个想象中的问题,但我遇到了补丁的真正问题.假设我有一个包含以下git历史的项目:

A - B - C
Run Code Online (Sandbox Code Playgroud)

现在,如果我收到两个补丁,C1并且C2应该应用C它们,我应该如何处理它们?如果我先应用补丁C1,那么我将无法应用补丁,C2因为存储库已成为:

A - B - C - C1
Run Code Online (Sandbox Code Playgroud)

是否可以同时应用它们,或者我是否必须回复发送C2的人告诉他/她更新补丁?

现在假设我离线并工作和提交,以便存储库变为:

A - B - C - D - E
Run Code Online (Sandbox Code Playgroud)

然后我查看我的电子邮件并收到补丁C.再次,是否可以简单地应用该补丁,或者我是否需要更新补丁?

git patch

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

适用于iPhone的Objective-C DOM XML解析器

大家好,我正在寻找一种使用DOM解析XML文档的方法.我一直在使用SAX与NSXMLParser,但现在我真的想要一个DOM树(或任何可以快速将XML文档转换为NSDictionary的东西)
感谢您的帮助

xml iphone dom objective-c

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

查看由xsl转换的xml文档的html源代码

这是一个相当简单的案例.我有一个链接到xsl样式表的xml文档,可以在Web浏览器中查看.既然输出并不是我所期望的,那么我想查看(输出)html代码以查看发生了什么.但是,当我说"查看源代码"时,浏览器只会向我发送原始的xml文件.
请告诉我如何查看html源代码:)

更新
其实我可以用浏览器查看它(右击并说"检查元素"),但这是有点依赖于浏览器.另外,我不想为这个小礼物安装任何东西.是否有任何通用解决方案(即适用于所有(或大多数)浏览器的东西)?

html xml browser xslt debugging

7
推荐指数
1
解决办法
3794
查看次数

在C++中,"_ MOVE_H"有什么特别之处?

我有这样的C++文件

#ifndef _MOVE_H
#define _MOVE_H

class Move {
    int x, y;
public:
    Move(int initX = 0, int initY = 0) : x(initX), y(initY) {}
    int getX() { return x; }
    void setX(int newX) { x = newX; }
    int getY() { return y; }
    void setY(int newY) { y = newY; }
};

#endif
Run Code Online (Sandbox Code Playgroud)

很让我惊讶,所有的代码#ifndef,并#endif简单地由编译器(我发誓,我没有界定忽视_MOVE_H其他地方),我有失踪定义的各种错误.我在想我做错了什么,但是当我尝试使用另一个键时(比如_MOVE_Ha,一切都恢复正常.这是否_MOVE_H意味着C++中的一些特殊内容?

我正在运行Ubuntu 10.04,GCC 4.4.3,如果这很重要的话.

谢谢,

c++ include-guards

7
推荐指数
2
解决办法
1846
查看次数

UIButtonTypeRoundedRect作为accessoryView

我有一个表格视图,我想在每个单元格的右侧放置一个标签,所以- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath我有一些像这样的代码

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.titleLabel.text = @"title";
cell.accessoryView = button;
Run Code Online (Sandbox Code Playgroud)

但是,该按钮根本不显示.谁知道为什么?我确信声明是正确的,因为如果我用.替换按钮声明

UIButton *button = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
Run Code Online (Sandbox Code Playgroud)

然后按钮出现,这让我觉得圆角矩形也应该出现.

iphone objective-c uitableview accessoryview

4
推荐指数
1
解决办法
1976
查看次数