#定义已更改为constexpr auto 我在C++中定义了一些代码,EX: #define array_width 3;

#定义已更改为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++中,当有可供选择的选项时,人们应该避免使用宏。此外,最好为宏使用唯一前缀大小写命名约定,以避免与普通代码发生冲突。这些建议的主要原因是预处理器只做简单的文本替换(没有类型检查或编译器执行的类似操作)。使用

Visual Studio将建议更改为:

constexpr auto array_width = 3;
改变的原因是什么?好处是什么


谢谢。

宏通过替换文本来工作。对于宏,以下示例代码的格式将不正确:

struct foo
{
    int array_width{};
};

在现代C++中,当有可供选择的选项时,人们应该避免使用宏。此外,最好为宏使用
唯一前缀大小写
命名约定,以避免与普通代码发生冲突。

这些建议的主要原因是预处理器只做简单的文本替换(没有类型检查或编译器执行的类似操作)。使用预处理器时有许多潜在的陷阱——如果可以避免,就这样做`constexpr是目前允许更少宏的构建块之一

用权威来支持这个:从迈尔斯,有效C++,项目2(“喜欢代码> const s,<代码> EnUM < /Cult> s,和<代码>内联< <代码> >到<代码>定义< <代码> s”:

要记住的事情

  • 对于简单常量,首选
    const
    对象或
    enum
    s而不是
    #define
    s
  • [……]
< S. Meyers >,有效的现代C++,项目15(“使用<代码> CONTXPRPR < /代码>”):

要记住的事情

  • constexpr
    对象是
    const
    对象,并使用过程中已知的值进行初始化 汇编
  • [……]
  • constexpr
    对象和函数可以在比非
    constexpr
    对象和函数更广泛的上下文中使用

你的意思是
#define array_width 3
,但这一行不会出现错误,不会。每次使用都会出现大量语法错误。这就是使用第二个的原因之一。
=
符号通常不会出现在宏中。@LogicStuff-SNAP!