名前空間
変種
操作

置換関数

From cppreference.com
< cpp‎ | language
 
 
C++言語
全般
フロー制御
条件実行文
if
繰り返し文 (ループ)
for
範囲for (C++11)
ジャンプ文
関数
関数宣言
ラムダ式
inline指定子
動的例外仕様 (C++17まで*)
noexcept指定子 (C++11)
例外
名前空間
指定子
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点数
文字 - 文字列 - nullptr (C++11)
ユーザー定義 (C++11)
ユーティリティ
属性 (C++11)
typedef宣言
型エイリアス宣言 (C++11)
キャスト
メモリ確保
クラス
クラス固有の関数プロパティ
explicit (C++11)
static

特殊メンバ関数
テンプレート
その他
 
 

実装によって定義が提供される特定の関数は、置き換え可能です。C++プログラムは、置き換え可能な関数のシグネチャを持つ定義を提供することができ、これを置き換え関数と呼びます。置き換え関数が提供された場合、実装によって提供されるデフォルトのバージョンではなく、その関数が使用されます。このような置き換えは、プログラムの起動前に行われます。

置き換え関数の宣言が以下のいずれの条件も満たさない場合、プログラムは形式を誤っており、診断は不要です

コア言語

契約違反ハンドラー ::handle_contract_violation が置き換え可能であるかどうかは、実装定義です。

(C++26以降)

[編集] 標準ライブラリ

以下の標準ライブラリ関数は置き換え可能であり、関数のセマンティクスの説明は、C++標準ライブラリによって定義されるデフォルトバージョンと、プログラムによって定義される置き換え関数の両方に適用されます

メモリ割り当て関数
(関数) [編集]
メモリ解放関数
(関数) [編集]
プログラムがデバッガーの制御下で実行されているかを確認する
(関数) [編集]

[編集]

置き換え割り当て関数を使用

#include <cstddef>
#include <new>
#include <print>
 
// replacement function
void* operator new(std::size_t count)
{
    std::print("Replaced!");
    return nullptr;
}
 
int main()
{
    int* ptr = new int; // invokes the replacement version defined by the program
}

出力

Replaced!
English 日本語 中文(简体) 中文(繁體)