做了类似的事情后被咬了之后:
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警告这样的错误(是否有任何用例初始化成员的用例?)
或者在构造函数参数类似于字段的情况下,对更好的命名约定的任何建议。
答案 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]