#定义已更改为constexpr auto 我在C++中定义了一些代码,EX: #define array_width 3;
Visual Studio将建议更改为:#定义已更改为constexpr auto 我在C++中定义了一些代码,EX: #define array_width 3;,c++,visual-studio,C++,Visual Studio,Visual Studio将建议更改为: constexpr auto array_width = 3; 改变的原因是什么?好处是什么 谢谢。宏通过替换文本来工作。对于宏,以下示例代码的格式将不正确: struct foo { int array_width{}; }; 在现代C++中,当有可供选择的选项时,人们应该避免使用宏。此外,最好为宏使用唯一前缀大小写命名约定,以避免与普通代码发生冲突。这些建议的主要原因是预处理器只做简单的文本替换(没有类型检查或编译器执行的类似操作)。使用
constexpr auto array_width = 3;
改变的原因是什么?好处是什么
谢谢。宏通过替换文本来工作。对于宏,以下示例代码的格式将不正确:
struct foo
{
int array_width{};
};
在现代C++中,当有可供选择的选项时,人们应该避免使用宏。此外,最好为宏使用
唯一前缀大小写
命名约定,以避免与普通代码发生冲突。这些建议的主要原因是预处理器只做简单的文本替换(没有类型检查或编译器执行的类似操作)。使用预处理器时有许多潜在的陷阱——如果可以避免,就这样做`constexpr是目前允许更少宏的构建块之一
用权威来支持这个:从迈尔斯,有效C++,项目2(“喜欢代码> const s,<代码> EnUM < /Cult> s,和<代码>内联< <代码> >到<代码>定义< <代码> s”:
要记住的事情- 对于简单常量,首选
对象或const
s而不是enum
s#define
- [……]
对象是constexpr
对象,并使用过程中已知的值进行初始化 汇编const
- [……]
对象和函数可以在比非constexpr
对象和函数更广泛的上下文中使用constexpr
你的意思是
#define array_width 3
,但这一行不会出现错误,不会。每次使用都会出现大量语法错误。这就是使用第二个的原因之一。=
符号通常不会出现在宏中。@LogicStuff-SNAP!