小编chr*_*irk的帖子

如果语句评估,C/C++最有效

X几乎99.9%的时间都是真的,但我也需要处理Y和Z. 虽然X条件的主体是空的,但我认为如果省略X条件,它应该比检查2个其他条件Y和Z更快.你怎么看?

if (likely(X))
{
}
else if (unlikely(Y))
{
...
}
else if (unlikely(Z))
{
...
}
Run Code Online (Sandbox Code Playgroud)

c c++ gcc if-statement branch-prediction

8
推荐指数
2
解决办法
2661
查看次数

python正则表达式用跳过模式拆分某些模式

我想在某些模式上拆分Python字符串,而不是其他模式.例如,我有字符串

Joe, Dave, Professional, Ph.D. and Someone else
Run Code Online (Sandbox Code Playgroud)

我想拆就\sand\s,,但不, Ph.D.

如何在Python正则表达式中完成?

python regex

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

帮助模板化字节交换功能,性能受到影响?

template<int size>
inline void* byteswap(void* __x);

template<>
inline void* byteswap<2>(void* __x)
{
    return (*(uint16*)__x >> 8) | (*(uint16*)__x << 8);
}

template<>
inline void* byteswap<4>(void* __x)
{
    return (byteswap<4>(__x & 0xffff) << 16) | (bswap_16 (__x >> 16));
}

template<typename T>
inline T byteswap(T& swapIt)
{
    return (T*)byteswap<sizeof(T)>(swapIt);
}    

int main() {
    uint32 i32 = 0x01020304;
    uint16 i16 = 0x0102;

    byteswap(i32);
    byteswap(i16);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以上显然甚至无法编译。我很困惑,因为似乎我需要 void* 作为函数的参数,而当我需要调用 byteswap<2> 但有参考时,byteswap<4> 中的事情有点难看。

知道如何使这个看起来漂亮吗?它是否有可能实现(使用内联或其他技巧)使其性能与直接进行位操作一样?

c++ performance templates bit-manipulation

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

在C++中一般封装结构中的"可选"字段的最佳方法是什么?

我有许多具体结构,我想将字段指定为可选(现在或不存在).只是想知道人们有什么想法来实现这一目标.这是一个示例结构(字段也可以是其他结构,甚至是结构的向量):

 struct LogonMessage_t
       {
          Header_t header; // this points to another struct containing all primitives
          std::string username;
          std::string password;
          std::vector<LogonOption_t> LogonOptions;
          int subaccountid;
          std::string Text;
       }
Run Code Online (Sandbox Code Playgroud)

我想将所有字段默认为不存在并逐个启用它们,也许是在它们的setter中.由于生成了这些结构,因此优选通用方法.

我到目前为止的想法是:

  1. 指示字段是否已设置的字段位图
  2. 使用sentinel值(对于std :: string为"\ 0",对于int为-1​​,对于float为-1.0f)
  3. 某种模板容器/代理封装每个字段以指示它是否已设置,任何想法?我认为这可能是最好的方法.

顺便说一句,使用地图或其他STL容器来封装字段在这里不起作用,它们需要是具体的结构.

c++ templates struct optional-variables

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

sprintf到std :: string直接?

我感兴趣(出于各种原因)格式使用sprintf将结果放在一个std::string对象中.我提出的语法最直接的方法是:

char* buf;
sprintf(buf, ...);
std::string s(buf);
Run Code Online (Sandbox Code Playgroud)

还有其他想法吗?

c++ performance printf stdstring

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

将32位整数存储到磁盘的绝对最快方法?

我有一个非常延迟敏感的例程,它按顺序生成整数,但需要在崩溃或重新启动时将最后生成的一个存储到磁盘.

目前我正在寻找文件的开头,然后写出整数,然后每次生成新的int时刷新.需要刷新,因此写入至少会击中电池供电的控制器高速缓存.

寻求是非常昂贵的,所以我考虑只是附加4个字节,如果需要恢复,那么寻找到最后并读取最后4个字节.之前的声明显然假设没有太多其他磁盘活动发生,因此写头应该理想地保留在文件的末尾.

这个数字通常不会高于10,000,000,所以40MB并不是那么糟糕.

关于如何在不牺牲完整性的情况下实现最小延迟的任何建议?

Linux 2.6+上的C或C++

c c++ linux file-io low-latency

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

这两个局部变量之间有什么区别?

const std::string  s1("foo");
const std::string& s2("foo");
Run Code Online (Sandbox Code Playgroud)

不确定它们是如何不同但我看到两种用法的证据.有任何想法吗?

c++ variables const reference local

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

用于将struct类型映射到枚举的C++模板?

我有类似的东西:

struct A { ... };
struct B { ... };
struct C { ... };

class MyEnum {
public:
    enum Value { a, b, c; }
}

template<typename T> MyEnum::Value StructToMyEnum();

template<>
MyEnum::Value StructToMyEnum<A>()
{
   return MyEnum::a;
}

template<>
MyEnum::Value StructToMyEnum<B>()
{
   return MyEnum::b;
}
Run Code Online (Sandbox Code Playgroud)

我基本上想a通过调用soemthing直接获得

StructToMyEnum<A>();
Run Code Online (Sandbox Code Playgroud)

这是我能想到的最好的,但是当我编译时,我multiple definition of 'MyEnum::Value StructToMyEnum<A>()'在尝试链接时遇到错误.

有关根据此示例将类型映射到枚举的最佳方法的任何建议吗?

c++ enums templates struct map

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

可以消除这个基类构造函数吗?

有没有办法消除Foo中的显式构造函数调用,并以某种方式将Bar :: len分配给Bar的任何子类的大小?

class Bar
{
    size_t len_;

    Bar(size_t len) : len_(len) { }
};

class Foo : public Bar
{    
    Foo() : Bar(sizeof(Foo)) { }
};
Run Code Online (Sandbox Code Playgroud)

c++ templates class subclass

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

调用C++中对象列表的对象方法

如何为每个提供给函数的对象设计一种方法来调用对象方法?

也就是说,

ResetAll(obj1, obj2, obj3, ...)
Run Code Online (Sandbox Code Playgroud)

会叫obj1.Reset(),obj2.Reset()等...

对象不在List或任何其他STL容器中.

c++ function object

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