小编Gle*_*len的帖子

95
推荐指数
5
解决办法
31万
查看次数

在C和C++中使用逗号而不是分号的效果

我在很多时候注意到重构各种C和C++代码时使用的是逗号,而不是使用分号来分隔语句.像这样的东西;

int a = 0, b = 0;
a = 5, b = 5;
Run Code Online (Sandbox Code Playgroud)

我期待的地方

int a = 0, b = 0;
a = 5; b = 5;
Run Code Online (Sandbox Code Playgroud)

我知道C和C++允许使用逗号分隔语句(特别是循环标题),但这两段代码之间有什么区别?我的猜测是,逗号已经留下了剪切和粘贴的结果,但这是一个错误,是否会影响执行?

c c++

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

在Java中使用Casting是否有任何运行时成本?

这两个块之间会有任何性能差异吗?

public void doSomething(Supertype input)
{
    Subtype foo = (Subtype)input;
    foo.methodA();
    foo.methodB();
}
Run Code Online (Sandbox Code Playgroud)

public void doSomething(Supertype input)
{
    ((Subtype)input).methodA();
    ((Subtype)input).methodB();
}
Run Code Online (Sandbox Code Playgroud)

这两者之间的任何其他考虑或建议?

java performance casting

34
推荐指数
2
解决办法
9945
查看次数

重构C++代码以使用前向声明

我有一个很长的代码库已经存在了一段时间,我试图通过重构来整理它.我想做的一件事是找到我可以转发声明成员的所有标题,而不是包括整个头文件.

这是一个相当费力的过程,我正在寻找一个工具,可以帮助我找出哪些标题包含可以向前声明的成员.

是否有编译器设置可能会发出警告或建议以下代码可以使用前向声明?我正在使用以下编译器icc,gcc,sun studio和HP的aCC

是否有可以完成相同工作的独立工具?

#include "Foo.h"
...//more includes

class Bar {
.......
private:
    Foo* m_foo;
};
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction refactoring forward-declaration

19
推荐指数
2
解决办法
1030
查看次数

在boost中等待多个条件变量?

我正在寻找一种等待多个条件变量的方法.即.就像是:

boost::condition_variable cond1;  
boost::condition_variable cond2;

void wait_for_data_to_process()  
{  
    boost::unique_lock<boost::mutex> lock(mut);

    wait_any(lock, cond1, cond2); //boost only provides cond1.wait(lock);

    process_data();
}
Run Code Online (Sandbox Code Playgroud)

条件变量可能是这样的.如果没有替代解决方案?

谢谢

c++ multithreading boost

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

Apache Spark Streaming的失败集成测试

我一直试图通过一些我为Apache Spark项目编写的单元/集成测试来追踪问题.

使用Spark 1.1.1时,我的测试通过了.当我尝试升级到1.4.0(也尝试过1.4.1)时,测试开始失败.

我已经设法将重现问题所需的代码减少到下面的小集成测试.

有趣的是,如果我在测试中注释掉@RunWith注释,那么测试就会正确通过.显然我不需要@RunWith注释来进行这种减少测试,但真正的测试相当广泛地使用了模拟,所以我宁愿不必使用PowerMock.

package com.example;

import org.apache.spark.SparkConf;
import org.apache.spark.streaming.Duration;
import org.apache.spark.streaming.api.java.JavaStreamingContext;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
public class SampleTest {

    @Before
    public void setup() throws Exception {
        SparkConf conf = new     SparkConf(false).setMaster("local[2]").setAppName("My app");
        JavaStreamingContext jsc = new JavaStreamingContext(conf, new Duration(1000));
    }

    @Test
    public void exampleTest() {
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我看到的例外情况

java.io.IOException: failure to login
    at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:796)
    at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:748)
    at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:621)
    at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2162)
    at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2162)
    at scala.Option.getOrElse(Option.scala:120)
    at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2162)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:301)
    at org.apache.spark.streaming.StreamingContext$.createNewSparkContext(StreamingContext.scala:842)
    at org.apache.spark.streaming.StreamingContext.<init>(StreamingContext.scala:80) …
Run Code Online (Sandbox Code Playgroud)

java integration-testing unit-testing powermock apache-spark

15
推荐指数
1
解决办法
2437
查看次数

如何让Valgrind调试器逐步完成程序

早上好,我正在尝试使用Valgrind调试器来完成一个程序.

我的valgrind命令行是 valgrind -tool memcheck --leak-check=full --db-enable=yes ./MatchUpAcurate.exe.

我在Centos Linux 5.5版上使用valgrind-3.5.0和gdb版本7,0.1-23.el5_5.2.

当valgrind提出问题Attach to Debugger时,我输入Yes.然后,valgrind调试器返回:4428: return new tuple2<int,A>(2, i++, p->next());

当我尝试使用gdb步骤或继续命令时,valgrind说

[New Thread 0x410fd10 (LWP 6548] Cannot find user-level thread for LWP 6551: generic error.

当我尝试valgrind --single-step=yes在valgrind命令行上使用调试器选项时,valgriind说Bad option aborting.

任何valgrind用户都能告诉我如何单步执行C++源代码或继续完成程序吗?谢谢.

c++ valgrind

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

在C/C++中解析配置文件

我是一个新手,正在寻找一种快速简便的方法来解析C或C++中的文本文件(wxWidgets)

该文件看起来像这样(带有"子对象"的主要类别),它将出现在列表框中

[CategoryA]

[SubCat]

    Str1 = Test 

    Str2 = Description  

[SubCat] [End]

[SubCat]

    Str1 = Othertest
...

[CategoryA] [End]
Run Code Online (Sandbox Code Playgroud)

有什么建议?

c++

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

在C/C++中添加1个月到time_t的简单方法

我有一些代码使用Oracle函数add_months将Date增加X个月.

我现在需要在C/C++函数中重新实现相同的逻辑.由于我不想/需要进入的原因,我不能简单地向oracle发出查询以获取新日期.

有没有人知道在time_t中添加X个月的简单可靠的方法?计算类型的一些示例如下所示.

30/01/2009 + 1个月= 28/02/2009
31/01/2009 + 1个月= 28/02/2009
27/02/2009 + 1个月= 27/03/2009
28/02/2009 + 1个月= 31/03/2009
31/01/2009 + 50个月= 31/03/2013

c c++ date time-t date-math

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

提高 SSL 握手性能

我有一个短暂的客户端进程,它通过 SSL 与服务器通信。该进程被频繁调用,并且仅运行很短的时间(通常小于 1 秒)。此进程旨在用作用于执行较大任务的 shell 脚本的一部分,并且可能会被频繁调用。

在我的测试中,它每次启动时执行的 SSL 握手都显示为一个重要的性能瓶颈,如果可能的话,我希望减少它。

我想到的一件事是获取会话 ID 并将其存储在某个地方(有点像 cookie),然后在下一次调用时重新使用它,但这让我感到不安,因为我认为会有一些安全问题围绕做这件事。

所以,我有几个问题,

  1. 这是一个坏主意吗?
  2. 使用 OpenSSL 是否可以实现这一点?
  3. 有没有更好的方法来加速 SSL 握手过程?

c c++ openssl

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