αλεχολυτ Asked:2020-02-22 17:20:20 +0800 CST2020-02-22 17:20:20 +0800 CST 2020-02-22 17:20:20 +0800 CST 条件语句的局部变量 772 您需要设置一个由条件运算符ifor限定范围的变量switch。我怎样才能做到这一点? c++ 2 个回答 Voted Vlad from Moscow 2020-02-22T17:52:10+08:002020-02-22T17:52:10+08:00 C++ 最初具有在条件中声明变量的能力。在 C++11 中,这些特性通过引入上下文转换的概念和在大括号中使用初始化列表的能力而得到扩展。根据C++标准(6.4选择语句) 2 条件规则既适用于选择语句,也适用于 for 和 while 语句 (6.5)。声明符不应指定函数或数组。decl-specifier-seq 不应定义类或枚举。如果 auto 类型说明符出现在 decl-specifier-seq 中,则声明的标识符的类型从初始化程序中推导出来,如 7.1.6.4 中所述。 3 由条件中的声明引入的名称(由条件的声明说明符序列或声明符引入)在从声明点到条件控制的子语句末尾的范围内。如果名称在条件控制的子语句的最外层块中重新声明,则重新声明名称的声明格式错误。 4 在 switch 语句以外的语句中作为初始化声明的条件的值是根据上下文转换为 bool 的声明变量的值(第 4 条)。如果该转换格式错误,则程序格式错误。在 switch 语句中作为初始化声明的条件的值是声明变量的值,如果它具有整型或枚举类型,否则该变量隐式转换为整型或枚举类型。作为表达式的条件的值是表达式的值,对于 switch 以外的语句,上下文转换为布尔值;如果该转换格式错误,则程序格式错误。在用法明确的情况下,条件的值将简称为“条件”。 也就是说,您可以在诸如if, switch,等句子的条件中包含表达式,而不是包含具有初始值设定项的变量的对象化。在子句,中,声明变量的值根据上下文转换为类型,并且该值用作条件值。forwhileifforwhilebool 您不得将数组或函数声明用作这些子句中的声明,也不得定义类或枚举。 对于switch子句,声明的变量必须是整数或枚举类型,或者可以隐式转换为这些类型。 这是一个语句条件中变量声明的例子if #include <iostream> #include <string> class A { private: std::string s; public: explicit A( const std::string &s ) : s( s ) { } explicit operator bool() const { return s == "Hi"; } void hi() { std::cout << "I'm glad to see you" << std::endl; } void bye() { std::cout << "See you latter" << std::endl; } }; int main() { if ( A a { "Hi" } ) { a.hi(); } else { a.bye(); } if ( A a { "Bye" } ) { a.hi(); } else { a.bye(); } } 控制台输出 I'm glad to see you See you latter 此示例声明一个具有显式强制转换运算符的类bool。因此,在句子的条件中If,您可以声明一个类的对象,由于这个运算符,该对象将被转换为类型的值bool。将此对象限制在运算符的范围内if。 Best Answer αλεχολυτ 2020-02-22T17:20:20+08:002020-02-22T17:20:20+08:00 在 c++17 中,可以直接在条件运算符ifor中指定变量声明switch。例如: if (int i = 42; cond) { ... } switch (SomeType t; var) { ... } 这里的关键点是你在condor上分支var,而不是在ior上分支t。 在 c++17 之前,为了这些目的,你必须通过输入一个新的块{ },它看起来不太好: { int i = 42; if (cond) { ... } } 新语法模仿了这种方法。
C++ 最初具有在条件中声明变量的能力。在 C++11 中,这些特性通过引入上下文转换的概念和在大括号中使用初始化列表的能力而得到扩展。根据C++标准(6.4选择语句)
也就是说,您可以在诸如
if
,switch
,等句子的条件中包含表达式,而不是包含具有初始值设定项的变量的对象化。在子句,中,声明变量的值根据上下文转换为类型,并且该值用作条件值。for
while
if
for
while
bool
您不得将数组或函数声明用作这些子句中的声明,也不得定义类或枚举。
对于
switch
子句,声明的变量必须是整数或枚举类型,或者可以隐式转换为这些类型。这是一个语句条件中变量声明的例子
if
控制台输出
此示例声明一个具有显式强制转换运算符的类
bool
。因此,在句子的条件中If
,您可以声明一个类的对象,由于这个运算符,该对象将被转换为类型的值bool
。将此对象限制在运算符的范围内if
。在 c++17 中,可以直接在条件运算符
if
or中指定变量声明switch
。例如:这里的关键点是你在
cond
or上分支var
,而不是在i
or上分支t
。在 c++17 之前,为了这些目的,你必须通过输入一个新的块
{ }
,它看起来不太好:新语法模仿了这种方法。