if-else 语句 (C++)

 2024-01-23 05:01:21  阅读 0

本文内容

if-else 语句控制条件分支。 仅当 if- 中的语句计算结果为非零值(或 true)时才会执行。 如果 的值非零,则执行下面的语句,并跳过后面可选的 else 语句后面的语句。 否则,将跳过后面的语句,如果存在 else,则执行 else 后面的语句。

计算结果为非零的表达式包括:

语法

在里面-:

-

-

-----或-等于-

-

-

-:

;

-:

{-}

-seq:

-seq

如果-:

别的-:

-:

(初始离子)如果-

(初始离子)如果--

17 从 C++17 开始,此可选元素可用。

if-else 语句

c语言if语句不满足_语句要求_满足的语言

在所有形式的 if 语句中,可计算,它具有除结构之外的任何值,包括所有副作用。 控制从 if 语句传递到程序中的下一条语句,除非执行的 if- 或 else- 包含中断或 goto。

if...else 语句的 else 子句与同一范围内最接近的前一个 if 语句关联,但没有相应的 else 语句。

例子

示例代码演示了使用多个 if 语句(带或不带 else):

// if_else_statement.cpp
#include 
using namespace std;
int main()
{
    int x = 10;
    if (x < 11)
    {
        cout << "x < 11 is true!\n";  // executed
    }
    else
    {
        cout << "x < 11 is false!\n"; // not executed
    }
    // no else statement
    bool flag = false;
    if (flag == true)
    {
        x = 100; // not executed
    }
    int *p = new int(25);
    if (p)
    {
        cout << *p << "\n"; // outputs 25
    }
    else
    {
        cout << "p is null!\n"; // executed if memory allocation fails
    }
}

输出:

x < 11 is true!
25

带初始值设定项的 if 语句

从 C++17 开始,if 语句还可以包含声明和初始化命名变量的 init 表达式。 当仅在 if- 范围内需要变量时,请使用这种形式的 if-。 特定于:此表单从 2017 版本 15.3 开始可用,并且至少需要 /std:c++17 编译器选项。

例子

// Compile with /std:c++17
#include 
#include 
#include 
#include 
#include 
using namespace std;
map m{ {1, "one"}, {2, "two"}, {10,"ten"} };
mutex mx;
bool shared_flag = true; // guarded by mx
int getValue() { return 42; }
int main()
{
    if (auto it = m.find(10); it != m.end())
    {
        cout << it->second << "\n";
    }
    if (int x = getValue(); x == 42)
    {
        cout << "x is 42\n";
    }
    if (lock_guard lock(mx); shared_flag)
    {
        cout << "setting shared_flag to false\n";
        shared_flag = false;
    }
    string s{ "if" };
    if (auto keywords = { "if", "for", "while" }; any_of(keywords.begin(), keywords.end(), [&s](const char* kw) { return s == kw; }))
    {
        cout << "Error! Token must not be a keyword\n";
    }
}

输出:

ten
x is 42
setting shared_flag to false
Error! Token must not be a keyword

if 语句

从 C++17 开始,您可以在函数模板中使用 if 语句来做出编译时分支决策,而无需诉诸多个函数重载。 特定于:此表单从 2017 版本 15.3 开始可用,并且至少需要 /std:c++17 编译器选项。

例子

此示例演示如何根据发送给模板的类型有条件地编译模板:

// Compile with /std:c++17
#include 
template
auto Show(T t)
{
    //if (std::is_pointer_v) // Show(a) results in compiler error for return *t. Show(b) results in compiler error for return t.
    if constexpr (std::is_pointer_v) // This statement goes away for Show(a)
    {
        return *t;
    }
    else
    {
        return t;
    }
}
int main()
{
    int a = 42;
    int* pB = &a;
    std::cout << Show(a) << "\n"; // prints "42"
    std::cout << Show(pB) << "\n"; // prints "42"
}

if 语句在编译时进行计算,编译器仅生成与发送到函数模板的参数类型相匹配的 if 分支的代码。 如果注释掉 if 语句并取消注释 if 语句,编译器会为两个分支生成代码。 这意味着您会收到错误:

使用 if 可以解决这个问题,因为只有与发送到函数模板的参数类型匹配的语句才会被编译。

输出:

42
42

也可以看看

选择语句

关键词

语句(C++)

标签: 语句 示例 分支

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码