我目前正在学习使用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,而对于三元的假分支,它会减少x和y?
我甚至把括号括在真正的分支周围,就像这样:
someValue ? …Run Code Online (Sandbox Code Playgroud) c++ conditional-operator operator-precedence language-lawyer
我正在研究欧拉项目.特别是#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
那么为什么要从下到上开始呢?
我认为C/C++与C#/ Java性能问题很好,这意味着我已经阅读了足够的证据来证明VM语言不一定比"接近硅"语言慢.主要是因为JIT编译器可以进行静态编译语言无法进行的优化.
然而,我最近收到了一个人的简历,他声称基于Java的高频交易总是被C++击败,并且他一直处于这种情况.
快速浏览工作现场确实表明HFT申请人需要C++知识,看看Wilmott论坛会显示所有从业者都在谈论C++.
这种情况有什么特别的原因吗?我原以为现代金融业务有点复杂,首选具有类型安全性,托管内存和丰富库的VM语言.这种生产力更高.此外,JIT编译器越来越好.他们可以在程序运行时进行优化,因此您认为他们使用该运行时信息来击败非托管程序的性能.
也许这些人正在用C++编写关键位并从托管环境(P/Invoke等)调用它们?那可能吗?
最后,有没有人有这方面的核心问题的经验,这就是为什么在这个领域,非托管代码毫无疑问优先于托管?
据我所知,HFT人员需要尽快对传入的市场数据作出反应,但这不一定是硬实时要求.如果你的速度慢,你的情况会更糟,这是肯定的,但是你不需要保证每次响应都有一定的速度,你只需要一个快速的平均值.
编辑
是的,到目前为止有几个很好的答案,但相当普遍(很好的基础).让我指出一下HFT人会运行什么样的程序.
主要标准是反应能力.当订单进入市场时,您希望成为第一个能够对其做出反应的订单.如果你迟到了,其他人可能会在你之前接受它,但是每个公司的策略都略有不同,所以如果一次迭代有点慢,你可能会好.
该程序全天运行,几乎没有用户干预.无论处理每个新的市场数据的功能是每秒运行几十(甚至几百)次.
这些公司通常对硬件的价格没有限制.
我正在做一些关于装箱/拆箱的阅读,事实证明,如果你做一个普通的String.Format()你在你的object[]参数列表中有一个值类型,它将导致一个装箱操作.例如,如果您正在尝试打印出整数的值并执行此操作string.Format("My value is {0}",myVal),则会将其粘贴myVal int到一个框中并在其ToString上运行该函数.
浏览,我发现了这篇文章.
看来你可以简单地通过.ToString在将值传递给string.Format函数之前执行值类型来避免拳击惩罚:string.Format("My value is {0}",myVal.ToString())
我不知道如何将时间戳转换为日期.我有:
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日,但是错了.
这是我在网上发现的一篇有趣的文章.
它讨论了该公司如何能够在托管环境中解析大量财务数据,主要是通过对象重用和避免不可变因素(如字符串).然后他们继续说明他们的程序在连续操作阶段没有做任何GC.
这是非常令人印象深刻的,我想知道这里是否有其他人有关于如何做到这一点的更详细的指导.首先,我想知道如何避免使用字符串,当消息中的某些数据是字符串时,无论客户端应用程序正在查看消息,都希望传递这些字符串?另外,你在启动阶段分配了什么?你怎么知道它够了?声明一大块内存并保留对它的引用以便GC不会启动是否很简单?客户端应用程序使用这些消息怎么样?是否还需要按照这些严格的标准编写?
另外,我需要一个特殊工具来查看内存吗?到目前为止,我一直在使用SciTech内存分析器.
当桌子滚动时,我试图将搜索栏保持在视图中.目前我将它作为标题放在一个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.
我错过了什么吗?
我想创建一个C++ 11线程,我希望它在我的第一个核心上运行.我发现pthread_setaffinity_np并且sched_setaffinity可以更改线程的CPU亲和性并将其迁移到指定的CPU.但是,在线程运行后,此关联性规范会发生更改.
如何创建具有特定CPU关联(cpu_set_t对象)的C++ 11线程?
如果在初始化C++ 11线程时无法指定关联,那么如何pthread_t在C中执行?
我的环境是Ubuntu上的G ++.一段代码表示赞赏.
我正在尝试使用套接字和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) 我在主机和交换机之间有一个链接.
该链路具有带宽和延迟.如何计算从主机A传输到交换机1的2个数据包(大小为1KB)的时间?
这是图(我说的是第一个链接)

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