避免/警告C ++成员的自我初始化

时间:2013-09-05 11:47:18

标签: c++ gcc

做了类似的事情后被咬了之后:

struct Person {

  std::string first_name;
  std::string last_name;
  Person(const std::string &first_name_, const std::string &last_name_) : 
    first_name(first_name_),
    last_name(last_name)
    {}
};

初始值设定项last_name(last_name)显然应该是last_name(last_name_) 有什么方法可以让gcc警告这样的错误(是否有任何用例初始化成员的用例?)

或者在构造函数参数类似于字段的情况下,对更好的命名约定的任何建议。

2 个答案:

答案 0 :(得分:9)

我通过使用参数的相同的名称作为他们初始化的成员来避免此问题。查找规则指定在成员初始化程序中使用时名称引用参数。

如果构造函数太复杂,则存在细微错误的余地;但如果您只是在初始化列表中初始化成员,则没有问题。

否则,GCC会发出关于使用未初始化值以及-Wall(或许-Wextra)或更具体-Wuninitialized等合理警告设置的警告。我想如果你想要更加具体,可能会有-Winit-self或类似的东西。

答案 1 :(得分:7)

是; -Wuninitialized-Winit-self

$ g++ -Wuninitialized -Winit-self -c init.cpp
init.cpp: In constructor 'Person::Person(const string&, const string&)':
init.cpp:7:3: warning: 'Person::last_name' is initialized with itself [-Wuninitialized]