ホームページ バックエンド開発 PHPチュートリアル 静的ローカル変数を通じて C、C++、C#、Java、PHP の特性を確認する

静的ローカル変数を通じて C、C++、C#、Java、PHP の特性を確認する

Jun 23, 2016 pm 01:39 PM

0 問題の起源

この問題についての考えは、オブジェクト指向設計におけるシングルトン設計パターンの実装に由来しています。

C++ でシングルトン モードを実装するための標準コードは次のとおりです:

#include <stdio.h>int init(){    printf("init()\n");    return 22;}int GetTheOnly(){    static int x = init();      return x;}int main(){    int only = GetTheOnly();    return 0;}
ログイン後にコピー

インスタンス関数 GetTheOnly() で、ユーザーは一意のインスタンスを静的ローカル変数に格納し、init() 関数を直接使用して動的に初期化します。それは初期化中に行われます。

とてもシンプルに見えますが、同じコードを C としてコンパイルすることはできません static int x = init() 行をコンパイルすると、コンパイラはエラーを報告します:

エラー: 初期化子要素は定数ではありません

It C 言語の静的ローカル変数には、初期化時に定数値を割り当てる必要があることがわかります。これは、初期値がコンパイラーによって決定される必要があることを意味します。

関数を呼び出して静的変数を初期化するには、C++ が init(); を 1 回だけ実行するようにする必要があります。この目的を達成するには、C++ コンパイラは、static int x = init(); に対して考えられる追加のコードを追加する必要があります。コンパイラが密かに冗長なアセンブリコードを生成しました。その結果、C++ は使いやすいですが、理解するのは簡単ではありません。



次に、他の言語がこの問題をどのように処理するかを確認したいと思い、C#、Java、PHP を使用して同様の実験を行い、小さな結論に達しました。

1 C# と Java は静的ローカル変数をまったくサポートしません

どちらも静的メンバー変数のみをサポートし、関数内の静的ローカル変数はサポートしません。考えてみれば当然のことですが、静的ローカル変数はほとんどの場合、静的メンバー変数に置き換えることができます。

C# テスト コード:

    static int x;    static char flag = 0;    if(flag == 0){        x = init();
ログイン後にコピー
Java テスト コード:


        flag = 1;    }    return x;
ログイン後にコピー
2 PHP は静的ローカル変数を C と同じように扱い、定数の初期化のみをサポートします


PHP テスト コード:

りー

3時'時計思考


静的ローカル変数の非常に小さな言語の詳細を通じて、これらの言語の特徴を発見することができます。

C++ コンパイラーは、ユーザーにより多くの言語機能を提供しようとする、勤勉で包括的な万能ツールです。ただし、これを行うには、ユーザーのためにコードを秘密裏に生成する必要があり、これが C++ 言語と「氷山効果」。 (C++ の多重継承、スタック上のオブジェクト、コピー構造を考えてください...)

Java と C# は使いやすさに重点を置き、曖昧さを避け、同じ関数に対してユーザーに正しい選択肢を 1 つだけ提供します。 (単一継承、オブジェクトはヒープ上でのみ作成可能、ガベージ コレクションについて考えてください)

C は常にその単純さ、効率性、透明性を維持しており、コンパイラーは正直で誠実であり、基本的にいつ生成されるアセンブリを予測できます。コードが表示されます。

PHP の構造部分は C の構文を模倣しているため、多くの機能が C に似ていますが、結局はインタープリター言語であり、特に変数名やクラス名などはそれ自体がインタープリター言語として使用できます。変数の特徴を利用できるため、信じられないほど柔軟になります。オブジェクト指向部分は Java の構文を模倣しながら、インタプリタ型言語の特性を完全に体現しています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

C# での Web サービス C# での Web サービス Sep 03, 2024 pm 03:32 PM

C# での Web サービスのガイド。ここでは、C# での Web サービスの概要について、テクノロジの使用、制限、例を交えて説明します。

Java をシンプルに: プログラミング能力を高める初心者向けガイド Java をシンプルに: プログラミング能力を高める初心者向けガイド Oct 11, 2024 pm 06:30 PM

Java をシンプルに: プログラミング能力の初心者向けガイド はじめに Java は、モバイル アプリケーションからエンタープライズ レベルのシステムに至るまで、あらゆるもので使用される強力なプログラミング言語です。初心者にとって、Java の構文はシンプルで理解しやすいため、プログラミングの学習に最適です。基本構文 Java は、クラスベースのオブジェクト指向プログラミング パラダイムを使用します。クラスは、関連するデータと動作をまとめて編成するテンプレートです。簡単な Java クラスの例を次に示します。 publicclassperson{privateStringname;privateintage;

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles