相关疑难解决方法(0)

轻量级C++编码标准中最重要的元素

我参与了开发非常精细的编码标准.我自己的经验是,如果你没有适当的流程来维护它和维护它的策略,就很难执行.

现在,我正在努力并领导一个环境,甚至可能在很长一段时间内拥有流程和后续策略.我仍然希望维持一些最低级别的可敬代码.所以我认为我会在这里得到很好的建议,我们可以共同制作一个合理的轻量级子集,其中最重要的编码标准实践供其他人用作参考.

所以,要强调这里的本质:

C++编码标准的哪些元素是最重要的?

  • 回答/投票规则

    • 每个答案1个候选人,最好有短暂的动机.

    • 投票选出专注于风格和主观格式指南的候选人.这并不是说它们不重要,只是说它们在这种背景下不太相关.

    • 投票给关注如何评论/记录代码的候选人.这是一个更大的主题,甚至可能值得拥有自己的职位.

    • 投票选出明显有助于更安全代码的候选人,从而最大限度地降低神秘错误的风险,从而提高可维护性等.

    • 不要向你不确定的候选人投票.即使它们听起来合理而聪明,或相反"肯定没有人会使用",你的投票应该基于清晰的理解和经验.

c++ coding-style

31
推荐指数
21
解决办法
4162
查看次数

成员结构是否可以从构造函数初始化列表中归零,而无需调用memset?

假设我有以下结构声明(没有构造函数的简单结构).

struct Foo
{
    int x;
    int y;
    int z;
    char szData[DATA_SIZE];
};
Run Code Online (Sandbox Code Playgroud)

现在让我们说这个结构是C++类的成员,如下所示:

class CFoobar
{
     Foo _foo;
public:
     CFoobar();
};
Run Code Online (Sandbox Code Playgroud)

如果我声明CFoobar的构造函数如下:

CFoobar::CFoobar()
{
    printf("_foo = {%d, %d, %d}\n", _foo.x, _foo.y,_foo.z);
    for (int x = 0; x < 100; x++)
       printf("%d\n", _foo.szData[x]);
}
Run Code Online (Sandbox Code Playgroud)

正如您所料,当CFoobar的构造函数运行时,垃圾数据被打印出来显然,简单的解决方法是memset或ZeroMemory&_foo.这就是我一直以来所做的......

但是,我注意到如果将_foo添加到构造函数的初始化列表中而没有参数,如下所示:

CFoobar::CFoobar()
: _foo()
{
Run Code Online (Sandbox Code Playgroud)

这似乎将_foo的成员变量清零.至少在Linux上使用g ++就是这种情况.

现在这里是我的问题:这是标准的C++,还是这个编译器的特定行为?

如果这是标准行为,有人可以引用我的官方来源参考吗?关于更复杂的结构和类的隐式零初始化行为的任何"陷阱"?

c++ visual-c++

20
推荐指数
1
解决办法
3600
查看次数

如何初始化类字段?

这是一个基本问题,但我很难找到明确的答案.

除了方法中的赋值之外,初始化列表是否是在C++中初始化类字段的唯一方法?

如果我使用错误的术语,这就是我的意思:

class Test
{
public:
    Test(): MyField(47) { }  // acceptable
    int MyField;
};

class Test
{
public:
    int MyField = 47; // invalid: only static const integral data members allowed
};
Run Code Online (Sandbox Code Playgroud)

编辑:特别是,有一个很好的方法来使用struct初始化器初始化struct字段吗?例如:

struct MyStruct { int Number, const char* Text };

MyStruct struct1 = {};  // acceptable: zeroed
MyStruct struct2 = { 47, "Blah" } // acceptable

class MyClass
{
    MyStruct struct3 = ???  // not acceptable
};
Run Code Online (Sandbox Code Playgroud)

c++ initialization ctor-initializer

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