小编Sta*_*zer的帖子

使用静态const结构对相关的类常量进行分组(C++ 11)

使用以下(A)的(dis)优势是什么:

// .h
class SomeClass
{
    static const struct ConstantGroup
    {
        int a = 1;
        string b = "b";
        // ... etc.
    } CONSTANT;
};
// .cpp
const SomeClass::ConstantGroup SomeClass::CONSTANT;
Run Code Online (Sandbox Code Playgroud)

与(B):

// .h
class SomeClass
{
    static const int A;
    static const string B;
    // .. etc.
};
// .cpp
const int SomeClass::A = 1;
const string SomeClass::B = "b";
Run Code Online (Sandbox Code Playgroud)

...对于某些相关静态类常量的组?假设不涉及模板,并且常量包含简单类型(POD或字符串).

到目前为止,我看到有利于(A)的以下优点:

  • 相关的常量可以作为一组编辑传递:正如评论中指出的那样,这通常不是所希望的.
  • 鉴于常量通常一起访问,我们可以为结构创建缩写,以便在需要时提高可读性,即: static const auto & SHORTHAND = SomeClass::LONG_NAME_FOR_CONSTANTS;

使用此模式时,要记住哪些缺点,问题或其他因素?

c++ c++11

4
推荐指数
1
解决办法
242
查看次数

通过浮点指针操作字节向量

是否可以std::vector<unsigned char>通过其数据指针操作 an ,就好像它是 的容器一样float

这是一个编译和(似乎?)按需要运行的示例(GCC 4.8,C++11):

#include <iostream>
#include <vector>

int main()
{
    std::vector<unsigned char> bytes(2 * sizeof(float));
    auto ptr = reinterpret_cast<float *>(bytes.data());
    ptr[0] = 1.1;
    ptr[1] = 1.2;
    std::cout << ptr[0] << ", " << ptr[1] << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码段成功地从字节缓冲区写入/读取数据,就好像它是一个float. 从阅读有关 reinterpret_cast我担心这可能是未定义的行为。我对理解类型别名细节的信心太小,无法确定。

代码片段是否如上文所述的未定义行为?如果是这样,是否有另一种方法来实现这种字节操作?

c++ c++11

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

标签 统计

c++ ×2

c++11 ×2