小编Car*_*los的帖子

为什么带逗号的三元运算符仅在真实情况下评估一个表达式?

我目前正在学习使用C++ Primer一书的C++,本书的其中一个练习是:

解释以下表达式的作用: someValue ? ++x, ++y : --x, --y

我们知道什么?我们知道三元运算符的优先级高于逗号运算符.使用二元运算符这很容易理解,但是对于三元运算符,我有点挣扎.使用二元运算符"具有更高的优先级"意味着我们可以使用具有更高优先级的表达式周围的括号,并且它不会更改执行.

对于三元运算符,我会这样做:

(someValue ? ++x, ++y : --x, --y)
Run Code Online (Sandbox Code Playgroud)

有效地产生相同的代码,这无法帮助我理解编译器如何对代码进行分组.

但是,通过使用C++编译器进行测试,我知道表达式编译并且我不知道:运算符本身可以代表什么.所以编译器似乎正确地解释了三元运算符.

然后我以两种方式执行程序:

#include <iostream>

int main()
{
    bool someValue = true;
    int x = 10, y = 10;

    someValue ? ++x, ++y : --x, --y;

    std::cout << x << " " << y << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

11 10
Run Code Online (Sandbox Code Playgroud)

而另一方面someValue = false它与它打印:

9 9
Run Code Online (Sandbox Code Playgroud)

为什么C++编译器生成的代码只能为三元运算符的真分支递增x,而对于三元的假分支,它会减少xy

我甚至把括号括在真正的分支周围,就像这样:

someValue ? …
Run Code Online (Sandbox Code Playgroud)

c++ conditional-operator operator-precedence language-lawyer

118
推荐指数
4
解决办法
6954
查看次数

欧拉项目#18方法

我正在研究欧拉项目.特别是#18.
总而言之,我们的想法是从三角形中找到最大路径:

   3
  7 4
 2 4 6  
8 5 9 3
Run Code Online (Sandbox Code Playgroud)

3 + 7 + 4 + 9 = 23.

对此进行阅读,大多数人表示这是通过从下到上的工作而不是使用从上到下工作"贪婪"的算法来正确解决的.

我可以理解,从顶部开始向下选择你发现的最大值是"短视",可能不是整体最大值.

但为什么从底部到顶部的方法更好?
在我看来,它遇到了同样的问题.

例如,在示例中的三角形中,我们将得到(从底部开始):
9 + 6 + 4 + 3 = 22 <23

那么为什么要从下到上开始呢?

algorithm

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

高频融资中C++与虚拟机语言的性能

我认为C/C++与C#/ Java性能问题很好,这意味着我已经阅读了足够的证据来证明VM语言不一定比"接近硅"语言慢.主要是因为JIT编译器可以进行静态编译语言无法进行的优化.

然而,我最近收到了一个人的简历,他声称基于Java的高频交易总是被C++击败,并且他一直处于这种情况.

快速浏览工作现场确实表明HFT申请人需要C++知识,看看Wilmott论坛会显示所有从业者都在谈论C++.

这种情况有什么特别的原因吗?我原以为现代金融业务有点复杂,首选具有类型安全性,托管内存和丰富库的VM语言.这种生产力更高.此外,JIT编译器越来越好.他们可以在程序运行时进行优化,因此您认为他们使用该运行时信息来击败非托管程序的性能.

也许这些人正在用C++编写关键位并从托管环境(P/Invoke等)调用它们?那可能吗?

最后,有没有人有这方面的核心问题的经验,这就是为什么在这个领域,非托管代码毫无疑问优先于托管?

据我所知,HFT人员需要尽快对传入的市场数据作出反应,但这不一定是硬实时要求.如果你的速度慢,你的情况会更糟,这是肯定的,但是你不需要保证每次响应都有一定的速度,你只需要一个快速的平均值.

编辑

是的,到目前为止有几个很好的答案,但相当普遍(很好的基础).让我指出一下HFT人会运行什么样的程序.

主要标准是反应能力.当订单进入市场时,您希望成为第一个能够对其做出反应的订单.如果你迟到了,其他人可能会在你之前接受它,但是每个公司的策略都略有不同,所以如果一次迭代有点慢,你可能会好.

该程序全天运行,几乎没有用户干预.无论处理每个新的市场数据的功能是每秒运行几十(甚至几百)次.

这些公司通常对硬件的价格没有限制.

.net c++ performance finance real-time

31
推荐指数
4
解决办法
4715
查看次数

String.Format(...)中的Boxing和Unboxing ......以下是合理化的吗?

我正在做一些关于装箱/拆箱的阅读,事实证明,如果你做一个普​​通的String.Format()你在你的object[]参数列表中有一个值类型,它将导致一个装箱操作.例如,如果您正在尝试打印出整数的值并执行此操作string.Format("My value is {0}",myVal),则会将其粘贴myVal int到一个框中并在其ToString上运行该函数.

浏览,我发现了这篇文章.

看来你可以简单地通过.ToString在将值传递给string.Format函数之前执行值类型来避免拳击惩罚:string.Format("My value is {0}",myVal.ToString())

  1. 这是真的吗?我倾向于相信作者的证据.
  2. 如果这是真的,为什么编译器不能简单地为你做这个?也许它自2006年以来发生了变化?有人知道吗?(我没有时间/经验来进行整个IL分析)

.net c# boxing

23
推荐指数
4
解决办法
4192
查看次数

字符串日期的时间戳

我不知道如何将时间戳转换为日期.我有:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TextView czas = (TextView)findViewById(R.id.textView1);
    String S = "1350574775";
    czas.setText(getDate(S));        
}



private String getDate(String timeStampStr){
   try{
       DateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
       Date netDate = (new Date(Long.parseLong(timeStampStr)));
       return sdf.format(netDate);
   } catch (Exception ignored) {
    return "xx";
   }
} 
Run Code Online (Sandbox Code Playgroud)

答案是:1970年1月16日,但是错了.

android timestamp date

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

这些人如何避免制造任何垃圾?

这是我在网上发现的一篇有趣的文章.

它讨论了该公司如何能够在托管环境中解析大量财务数据,主要是通过对象重用和避免不可变因素(如字符串).然后他们继续说明他们的程序在连续操作阶段没有做任何GC.

这是非常令人印象深刻的,我想知道这里是否有其他人有关于如何做到这一点的更详细的指导.首先,我想知道如何避免使用字符串,当消息中的某些数据是字符串时,无论客户端应用程序正在查看消息,都希望传递这些字符串?另外,你在启动阶段分配了什么?你怎么知道它够了?声明一大块内存并保留对它的引用以便GC不会启动是否很简单?客户端应用程序使用这些消息怎么样?是否还需要按照这些严格的标准编写?

另外,我需要一个特殊工具来查看内存吗?到目前为止,我一直在使用SciTech内存分析器.

c# garbage-collection finance

16
推荐指数
2
解决办法
894
查看次数

如何将UISearchController的searchBar设置为不是tableHeaderView或navigationItem.titleview的视图?

当桌子滚动时,我试图将搜索栏保持在视图中.目前我将它作为标题放在一个tableview中,它可以正常工作,当然,当你走下桌子时,搜索栏会滚动离开屏幕.我以为我可以这样做只需修改此代码示例:

如何在iOS 8中使用UISearchController,其中UISearchBar位于导航栏中并具有范围按钮?

searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.delegate = self
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
tableview.tableHeaderView = searchContoller.searchBar // How to put it elsewhere?
//Alternative that also works
navigationItem.titleView = searchController.searchBar
Run Code Online (Sandbox Code Playgroud)

这个想法是采取其他观点并做

otherview = searchController.searchBar
Run Code Online (Sandbox Code Playgroud)

例如,UISearchBar的出口,或空白的UIView,或类似的东西.

但如果我这样做,它不会显示searchBar.它似乎只能用作表的标题视图或navigationItem.titleView.

我错过了什么吗?

uisearchbar ios swift ios8 uisearchcontroller

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

创建线程时设置CPU关联

我想创建一个C++ 11线程,我希望它在我的第一个核心上运行.我发现pthread_setaffinity_np并且sched_setaffinity可以更改线程的CPU亲和性并将其迁移到指定的CPU.但是,在线程运行后,此关联性规范会发生更改.

如何创建具有特定CPU关联(cpu_set_t对象)的C++ 11线程?

如果在初始化C++ 11线程时无法指定关联,那么如何pthread_t在C中执行?

我的环境是Ubuntu上的G ++.一段代码表示赞赏.

c c++ multithreading pthreads c++11

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

如何为存在2个网卡的UDP组播设置套接字?

我正在尝试使用套接字和c ++(c)获取udp组播数据.我有一个带有2个网卡的服务器,所以我需要将套接字绑定到特定的接口.目前我正在另一台只有一张网卡的服务器上进行测试.

当我使用INADDR_ANY时,我可以看到udp数据,当我绑定到特定接口时,我看不到任何数据.函数inet_addr没有失败(我现在删除了检查返回值).

代码如下.在具有一个网卡的服务器上,我的IP地址是10.81.128.44.我运行时收到数据:./ client 225.0.0.37 12346

这没有给我数据:./ client 225.0.0.37 12346 10.81.128.44

有什么建议?(希望代码编译,我删除了评论......)

   #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <time.h>
    #include <string.h>
    #include <stdio.h>

    #include <iostream>
    #include <string>

    using namespace std;

    #define HELLO_PORT 12345
    #define HELLO_GROUP "225.0.0.37"
    #define MSGBUFSIZE 256

    int main(int argc, char *argv[])
    {
        string source_iface;
        string group(HELLO_GROUP);
        int port(HELLO_PORT);

        if (!(argc < 2)) group = argv[1];
        if (!(argc < 3)) port = atoi(argv[2]);
        if (!(argc < 4)) source_iface = argv[3];

        cout << …
Run Code Online (Sandbox Code Playgroud)

c++ linux udp multicast

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

如何根据延迟和带宽计算数据包时间

我在主机和交换机之间有一个链接.

该链路具有带宽和延迟.如何计算从主机A传输到交换机1的2个数据包(大小为1KB)的时间?

这是图(我说的是第一个链接)

延迟和带宽

注意:我只想手动计算这些值,我想知道计算这些问题的原则/规律.

networking latency communication packets switching

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