小编Jas*_*ick的帖子

将C++字符串拆分为多行(代码语法,非解析)

不要混淆如何拆分字符串解析明智,例如:
在C++中拆分字符串?

关于如何在c ++中将字符串拆分为多行,我感到有点困惑.

这听起来像一个简单的问题,但请采取以下示例:

#include <iostream>
#include <string>
main() {
  //Gives error
  std::string my_val ="Hello world, this is an overly long string to have" +
    " on just one line";
  std::cout << "My Val is : " << my_val << std::endl;

  //Gives error
  std::string my_val ="Hello world, this is an overly long string to have" &
    " on just one line";  
  std::cout << "My Val is : " << my_val << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

我意识到我可以使用这个std::string append()方法,但我想知道是否有任何更短/更优雅(例如更多pythonlike,但显然三重引号等在c ++中不支持)的方式将c ++中的字符串分解为多行为了缘故可读性. …

c++ string syntax coding-style readability

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

内联功能v.C中的宏 - 什么是开销(内存/速度)?

我在Stack Overflow中搜索了类似函数的宏与内联函数的优缺点.

我发现了以下讨论: C中不同宏函数/内联方法的优缺点

......但它没有回答我的主要问题.

也就是说,在内存使用和执行速度方面,使用宏函数(带有变量,可能还有其他函数调用)和内联函数的开销是多少?

开销中是否存在编译器相关的差异?我同时拥有icc和gcc.

我模块化的代码片段是:

double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = AttractiveTerm * AttractiveTerm;
EnergyContribution += 
   4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
Run Code Online (Sandbox Code Playgroud)

我将其转换为内联函数/宏的原因是我可以将其放入ac文件中,然后有条件地编译其他类似但略有不同的函数/宏.

例如:

double AttractiveTerm = pow(SigmaSquared/RadialDistanceSquared,3);
double RepulsiveTerm = pow(SigmaSquared/RadialDistanceSquared,9);
EnergyContribution += 
   4 * Epsilon * (RepulsiveTerm - AttractiveTerm);
Run Code Online (Sandbox Code Playgroud)

(注意第二行的差异......)

这个函数是我的代码的核心功能,在我的程序中每步调用数千次,我的程序执行数百万步.因此,我希望尽可能减少开销,因此我浪费时间来担心内联的转换,将代码转换为宏.

根据之前的讨论,我已经意识到宏的其他优点/缺点(类型独立性和由此产生的错误)...但我最想知道的,目前不知道的是性能.

我知道你们中的一些C老兵会对我有一些很好的见解!

c macros optimization performance inline

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

为什么使用#if 0进行块注释?

反向工程代码,我对这种风格感到震惊,但我想确保没有充分理由做这些事情....

它只是我还是一种可怕的编码风格

if ( pwbuf ) sprintf(username,"%s",pwbuf->pw_name);
else sprintf(username,"%d",user_id);
Run Code Online (Sandbox Code Playgroud)

为什么包装代码不打算用于编译

#if 0
....
#endif
Run Code Online (Sandbox Code Playgroud)

而不是评论?


编辑:正如下面的一些解释,这是由于flummox/**/的可能性,我没有意识到.

但我仍然不明白,为什么不使用你的编程环境工具或喜欢的文本编辑器的宏来阻止使用"//"注释掉它

难道这不会更直接,更容易知道在视觉上跳过?


我只是缺乏C经验并且错过了为什么这些东西可能是一个好主意 - 或者没有任何借口,我有理由对这段代码的丑陋感到恼火?

c compilation c-preprocessor

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

这是宏观滥用吗?

我正在对一些代码进行逆向工程并遇到了这个......

/************************************************************************/
/*                                                                      */
/*                          MACRO CHECK_FREAD                           */
/*                                                                      */
/*  CHECK_FREAD is used to check the status of a file read.  It         */
/*   is passed the return code from read and a string to print out if   */
/*   an error is detected.  If an error is found, an error message is   */
/*   printed out and the program terminates.  This was made into a      */
/*   macro because it had to be done over and over and …
Run Code Online (Sandbox Code Playgroud)

c macros file-io coding-style

12
推荐指数
3
解决办法
1753
查看次数

如何定义Double Brackets/Double Iterator Operator,类似于Vector of Vectors'?

我正在移植使用大量浮点数的代码,这可能会触发从c到c ++的malloc失败.我问了一个关于我是否应该使用矢量或deques的问题,Niki Yoshiuchi慷慨地给了我一个安全包装类型的例子:

template<typename T>
class VectorDeque
{
private:
  enum TYPE { NONE, DEQUE, VECTOR };
  std::deque<T> m_d;
  std::vector<T> m_v;
  TYPE m_type;
  ...
public:
  void resize(size_t n)
  {
    switch(m_type)
    {
      case NONE:
      try
      {
        m_v.resize(n);
        m_type = VECTOR;
      }
      catch(std::bad_alloc &ba)
      {
        m_d.resize(n);
        m_type = DEQUE;
      }
      break;
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

我需要一个2D矢量/ deque deques的矢量,所以我将其修改为以下代码:

template<typename T>
class VectorDeque
{
private:
  enum STORAGE_CONTAINER { NONE, DEQUE, VECTOR };
  std::deque<std::deque<T> > x_d,y_d,z_d;
  std::vector<std::vector<T> > x_v,y_v,z_v;
  TYPE my_container;
public:
  void resize(size_t …
Run Code Online (Sandbox Code Playgroud)

c++ iterator vector operator-overloading deque

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

什么时候c ++优于Qt 5.7 for JavaScript中的JavaScript?

tl;博士版:

有没有的时候(如果有的话)使用的基准或语法的例子c++,而不是JSQt 5.7和/或定义的性能JS对比c++Qt 5.7证实后者的确是更快的文档对于项目的状态.


深入的背景

我对QML/ 的世界有些新意,Qt并且我正在尝试学习最佳实践和方法,以便总体上提供适合在嵌入式系统上最终部署的快速而强大的代码.

至于谁是偶尔涉猎很长一段时间C++开发者JavaScript,我总是从有经验的听说JS开发商,在大多数情况下,c++代码编译在快速之类的编译icpc与优化的表现将优于JS编译字节码的形式,甚至(深入Mozilla的开发官方博客讨论这个) .这确实是我自己有限的经历JS.

因此,我有点惊讶地读到Qt 5.7" Qt文档 ">" 性能注意事项和建议 ">" Javascript"状态:

大多数QML应用程序将以动态函数,信号处理程序和属性绑定表达式的形式包含大量JavaScript代码.这通常不是问题.由于QML引擎中的一些优化,例如对绑定编译器所做的那些优化,它可以(在某些用例中)比调用C++函数更快.但是,必须注意确保不会意外触发不必要的处理.

这条评论描绘了一幅非常有趣的图片,但我无法根据现实世界的测试案​​例找到相关信息.


问题:在现实世界中量化Qt应用程序c ++与JS

我的问题是:

  1. 什么构成" 不必要的处理 " Javascript
  2. 如何说" 不必要的处理 "被触发?
  3. 有没有什么时候c++仍然可以提供性能优势JSQML/ Qtcode 一起使用?(IO?)

与Qt Javascript相关的可量化性能信息的示例

为了在文档中定义语句,我给出了一些可量化信息的例子,我一直在寻找这些 …

javascript c++ benchmarking qt qml

8
推荐指数
0
解决办法
1178
查看次数

在Makefile教程中混淆了Sed One-Liner

任何人都可以用英语解释这个sed单行(更详细,更好)?

@sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' < $*.d > $@; \
             rm -f $*.d; [ -s $@ ] || rm -f $@
Run Code Online (Sandbox Code Playgroud)

这是本教程的一部分:http: //mad-scientist.net/make/autodep.html

我有一组非常量的源文件,并希望根据源文件中拼写的内容(包括)自动生成我的依赖树.

我很好地遵循了教程,直到...

PS我对sed select/replace有基本的了解,但我对匹配的字符串和重定向的所有层感到困惑....我还阅读了makefile教程一次,因此具备标准 makefile的基本知识......

c linux makefile sed

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

Bash脚本的优点v.用于Shell-Command-Heavy Utility的Python脚本

我需要编写一个脚本来执行以下操作:

  1. 监视排队系统,shell命令可以访问该系统.
  2. 创建使用嵌入式文本编辑,CP/MV,命令行脚本和编译的C++程序的混合从模板目录.
  3. 检查错误情况.
  4. 在错误条件下写入文件.

注:二维数组将是我的程序婉转有用的,但我目前正在与几个一维数组(由于bash脚本中的数组的限制)使所致.

这些任务似乎都有点"重壳",因为它很容易用一堆shell命令实现,所以我认为Bash脚本是一种自然的方式.到目前为止,我的结果还不错,但在我开始重构和完成代码之前,我想知道将它移植到Python是否更好.我已经在很多地方读过Python对bash"优越"的看法.我已经完成了一些Python脚本,据我所知,这是因为它有更多的内置库并且支持面向对象的编程.但是,我见过的所有脚本都使用shell命令,例如:http: //magazine.redhat.com/2008/02/07/python-for-bash-scripters-a-well-kept-secret/

实现令人讨厌的语法,比如必须将命令定义为变量,如下所示:

#You could add another bash command here
#HOLDING_SPOT="""fake_command"""

#Determines Home Directory Usage in Gigs
HOMEDIR_USAGE = """
du -sh $HOME | cut -f1
"""

#Determines IP Address
IPADDR = """
/sbin/ifconfig -a | awk '/(cast)/ { print $2 }' | cut -d':' -f2 | head -1
"""
Run Code Online (Sandbox Code Playgroud)

......并且需要包装功能和其他乐趣.

我只是愚蠢还是看起来不那么直观?使用Python有速度优势,它会超过Bash在shell脚本命令方面的简单优势吗?或者bash(没有2D数组,大括号/括号错综复杂)的语法是否有理由跳转到Python?

python bash shell performance refactoring

6
推荐指数
1
解决办法
2712
查看次数

为什么C++支持十六进制赋值,但是缺少二进制赋值?如何最好地存储标志?

我有一组位标志,用于我从C到C++移植的程序.

开始...

我程序中的标志以前定义为:

/* Define feature flags for this DCD file */
#define DCD_IS_CHARMM       0x01
#define DCD_HAS_4DIMS       0x02
#define DCD_HAS_EXTRA_BLOCK 0x04
Run Code Online (Sandbox Code Playgroud)

...现在我已经收集了常量的#defines(与类常量等相比)通常被认为是不好的形式.

这引发了关于如何最好地在c ++中存储位标志以及为什么c ++不支持将二进制文本分配给int的问题,就像它允许以这种方式分配十六进制数字(通过"0x").这篇问题总结在本文末尾.

我可以看到一个简单的解决方案是简单地创建单个常量:

namespace DCD {
   const unsigned int IS_CHARMM = 1;
   const unsigned int HAS_4DIMS = 2;
   const unsigned int HAS_EXTRA_BLOCK = 4;
};
Run Code Online (Sandbox Code Playgroud)

我们称这个想法为1.

我的另一个想法是使用整数枚举:

namespace DCD {
   enum e_Feature_Flags {
      IS_CHARMM = 1,
      HAS_4DIMS = 2,
      HAS_EXTRA_BLOCK = 8
   };
};
Run Code Online (Sandbox Code Playgroud)

但令我困扰的一件事是,当涉及更高的价值时,它似乎不那么直观......似乎......

namespace DCD {
   enum e_Feature_Flags {
      IS_CHARMM = 1,
      HAS_4DIMS = 2, …
Run Code Online (Sandbox Code Playgroud)

c++ binary flags inline variable-assignment

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

通过修改的exp替换最快的pow().通过计算较低功率时的平方

编辑:

目标: 通过从公共变量的功率计算中重新使用预先计算/缓存的功率,
生成一种无处不在的方法,以获得优于内置功能的自定义功率函数pow(double, uint).

已经做了什么:
我已经得到了这样一个比内置快大约40%的函数,但是这是一个强力的手动派生函数 - 我想要一种自动生成这样的电源功能块的方法任意uint权力.


的已知,

要获得最佳定制,pow(double, uint)您需要一些知识.对于这个问题,知识(澄清)是:

  1. 功率将是整数.
  2. 功率的最大值是已知的(N_MAX).
  3. 可以(重新)使用的预先计算的功率在编译时是已知的(例如在我的示例r2r4,和r6).
  4. r2无论其他预先计算的功率如何,都可以假设方形总是被计算出来.

解决方案要求

需要单独的程序来编写case查找表或预处理器逻辑以生成这样的表的最佳解决方案是可接受的,然而,不会接受使用手动生成的(即强力导出的)查找表的非最佳解决方案. (正如我已经那样,并且在我的例子中表明......想法是远离这个).


可能的解决途径

作为一个建议,你知道N_MAX和一组预先计算的权力B(B={2,4,6}对于我的例子).你可以在一个单独的程序中或在预处理器中生成一个所有正方形的表格Sq(Bi, x<= N_MAX . You can use this to form a basis setA , which you then search somehow to determine the least number of terms that can be summed to produce an arbitrary …

c++ math optimization pow

6
推荐指数
1
解决办法
1186
查看次数