使用以下(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;使用此模式时,要记住哪些缺点,问题或其他因素?
是否可以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我担心这可能是未定义的行为。我对理解类型别名细节的信心太小,无法确定。
代码片段是否如上文所述的未定义行为?如果是这样,是否有另一种方法来实现这种字节操作?