6

在被以下行为咬伤后:

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 警告这样的错误(是否有任何使用自身初始化成员的用例?)

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

4

2 回答 2

9

我通过对参数使用与它们初始化的成员相同的名称来避免这个问题。当在成员初始化程序中使用时,查找规则指定名称引用参数。

如果构造函数过于复杂,则可能会出现细微错误;但如果您只是在初始化列表中初始化成员,则没有问题。

否则,GCC 将给出一个关于使用未初始化值和合理警告设置的警告,比如-Wall(或者可能-Wextra),或者更具体地说-Wuninitialized-Winit-self如果您想更具体一些,我认为也可能有一个或类似的。

于 2013-09-05T11:49:54.713 回答
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]
于 2013-09-05T11:51:11.400 回答