[zh.cppreference.com]（https://zh.cppreference.com/w/cpp/language/if）によると、C ++の「if」ステートメントは条件付きステートメントであり、値に基づいていることができます。ブール式の。サブセンテンスをスキップするか、スキップしてください。基本的な「if」ステートメントの形式は次のとおりです。
`` c ++
if（条件）{
    声明
}
`` `
「条件」が「true」として「bool」に変更された場合、「ステートメント」を実行します。それ以外の場合は、「ステートメント」をスキップします。

「else」句を使用して「condition」が「false」であることを指定するときに、文を使用して実行することもできます。

`` c ++
if（条件）{
    ステートメント1
} それ以外 {
    ステートメント2
}
`` `

複数の条件をリンクして判断する場合は、Elseを使用することもできます。

`` c ++
if（条件1）{
    ステートメント1
} else if（condition2）{
    ステートメント2
} それ以外 {
    ステートメント3
}
`` `

** C ++ 17 **から始めて、「constexpr」を使用して、編集中に条件付き判断を下すことができます。このようにして、条件を満たす枝のみがインスタンス化され、コンパイルされ、条件に満足していない枝が破棄されます。これは、テンプレートプログラミングと静的アサーションに役立ちます。例えば：

`` c ++
テンプレート<typename t>
auto get_value（t t）{
    constexpr（std :: is_pointer_v <t>）
        return *t; // tがポインタータイプの場合、参照tと返されます
    それ以外
        t; //を返します。それ以外の場合は、tを直接返します
}
`` `

** C ++ 23 **から始めて、現在のコンテキストが一定の値であるかどうかに応じて異なる分岐を選択するために、「consteval」と `constevalreを使用することもできます。例えば：

`` c ++
consteval std :: uint64_t ipow_ct（std :: uint64_t base、std :: uint8_t exp）
{{
    if（！base）return base;
    std :: uint64_t res {1};
    while（exp）
    {{
        if（exp＆1）res *= base;
        exp /= 2;
        ベース *= base;
    }
    RESを返します。
}
 
contexpr std :: uint64_t ipow（std :: uint64_t base、std :: uint8_t exp）
{{
    conteval //コンパイル時に友好的なアルゴリズムを使用します
    {{
        ipow_ct（base、exp）を返します。
    }
    else //実行中の値
    {{
        return std :: pow（base、exp）;
    }
}
 
int service（int、const char* argv []）
{{
    static_assert（ipow（0,10）== 0 && ipow（2,10）== 1024）;
    std :: cout << ipow（std :: strlen（argv [0]）、3）<< \ n ';
}
`` `
根据 [zh.cppreference.com](https://zh.cppreference.com/w/cpp/language/if)，C++中的`if`语句是一种条件语句，它可以根据一个布尔表达式的值来执行或跳过一个子语句。基本的`if`语句的形式是：
```c++
if (condition) {
    statement
}
```
如果`condition`在转换到`bool`后为`true`，则执行`statement`；否则，跳过`statement`。

你还可以使用`else`子句来指定当`condition`为`false`时要执行的语句：

```c++
if (condition) { 
    statement1
} else {
    statement2
}
```

你也可以使用else if来链接多个条件判断：

```c++
if (condition1) {
    statement1
} else if (condition2) {
    statement2
} else {
    statement3
}
```

**从C++17开始**，你可以使用`if constexpr`来在编译时进行条件判断。这样，只有满足条件的分支会被实例化和编译，而不满足条件的分支会被丢弃。这对于模板元编程和静态断言很有用。例如：

```c++
template<typename T>
auto get_value(T t) {
    if constexpr (std::is_pointer_v<T>)
        return *t; // 如果T是指针类型，则解引用t并返回
    else
        return t; // 否则直接返回t
}
```

**从C++23开始**，你还可以使用`if consteval`和`if !consteval`来根据当前上下文是否是常量求值上下文来选择不同的分支。例如：

```c++
consteval std::uint64_t ipow_ct(std::uint64_t base, std::uint8_t exp)
{
    if (!base) return base;
    std::uint64_t res{1};
    while (exp)
    {
        if (exp & 1) res *= base;
        exp /= 2;
        base *= base;
    }
    return res;
}
 
constexpr std::uint64_t ipow(std::uint64_t base, std::uint8_t exp)
{
    if consteval // 使用编译时友好的算法
    {
        return ipow_ct(base, exp);
    }
    else // 使用运行时求值
    {
        return std::pow(base, exp);
    }
}
 
int main(int, const char* argv[])
{
    static_assert(ipow(0,10) == 0 && ipow(2,10) == 1024);
    std::cout << ipow(std::strlen(argv[0]), 3) << '\n';
}
```