在C++中通常用某种前缀命名成员变量来表示它们是成员变量而不是局部变量或参数.如果你来自MFC背景,你可能会使用m_foo.我myFoo偶尔也见过.
C#(或者可能只是.NET)似乎建议只使用下划线,如_foo.这是否允许C++标准?
我正在编写一个具有类似矩阵结构的类,我希望有一个名为minor的成员函数与矩阵操作相同.这会触发一些错误.我系统上的最小测试用例:
#include <iterator>
void minor(int row, int col);
Run Code Online (Sandbox Code Playgroud)
编译时,clang提供以下错误:
$ clang++ -Weverything -std=c++11 test.cpp
test.cpp:2:21: error: too many arguments provided to function-like macro invocation
void minor(int row, int col);
^
/usr/include/x86_64-linux-gnu/sys/sysmacros.h:67:10: note: macro 'minor' defined here
# define minor(dev) gnu_dev_minor (dev)
^
test.cpp:2:6: error: variable has incomplete type 'void'
void minor(int row, int col);
^
2 errors generated.
$
Run Code Online (Sandbox Code Playgroud)
sys/sysmacros.h的相关部分是:
/* Access the functions with their traditional names. */
# define major(dev) gnu_dev_major (dev)
# define minor(dev) gnu_dev_minor (dev)
# …Run Code Online (Sandbox Code Playgroud) 使用新的{}语法初始化对象,如下所示:
int a { 123 };
Run Code Online (Sandbox Code Playgroud)
有益 - 您不会声明函数而不是错误地创建变量.我甚至听说应该习惯这样做.但看看会发生什么:
// I want to create vector with 5 ones in it:
std::vector<int> vi{ 5, 1 }; // ups we have vector with 5 and 1.
Run Code Online (Sandbox Code Playgroud)
这是一个好习惯吗?有没有办法避免这样的问题?