私は関数内で定数(文字列を含む大きな構造体定数)を宣言しており、この関数内でのみ使用されています。 プログラムに実行時間に影響はありますか? ' 関数は呼び出されるたびに作成されます(時間がかかります)。または、参照はその寿命を通して使用されます。 関数の外側で定数を宣言すると(グローバル)、実行が速くなりますか?定数の宣言とグローバルとの違いは何ですか?
-1
A
答えて
1
実際、関数内で変数を宣言することは、優れた方法です。その変数がその関数の内部でのみ使用される場合。 2つのメソッドの間にはパフォーマンスの違いはありませんが、グローバルに定数を設定すると、よりクリエイティブな命名体系が必要になることがありますが、関数内の命名規則は汎用的です。結局のところ、その関数の内部でのみ使用されています。
1
名前空間を使用している限り、他の関連する関数が変数を使用する場合は、関数本体から直接移動します。
また、真の定数であれば、静的なconstexpr構造体を宣言することができます。つまり、関数が呼び出されるたびにスタックに割り当てられません(静的)。関数本体。また、コンパイル時に使用できる場所は、(constexpr)になります。
#include <iostream>
namespace Test{
struct Test {
char name[11];
int a;
int b;
};
static constexpr Test TEST_CONSTEXPR = {
"test value",
5,
6
};
}
int main()
{
std::cout << Test::TEST_CONSTEXPR.name << std::endl;
std::cin.get();
return 0;
}
1
static struct
あなたが一度それを設定し、それを行うことができます。これは、データセグメントから来て、起動時に初期化されます。下に生と汚れたコードが、あなたにいくつかの直感を与えるでしょう。
#include <stdio.h>
struct A {
int a;
int b;
};
void func(void)
{
static struct A a = {5,3};
printf("FUNC: A.a: %d\n", a.a);
}
int main(int argc, char **argv)
{
static struct A a = {6,4};
printf("MAIN: A.a: %d\n", a.a);
func();
return 0;
}
1
これはコンパイラに依存します。
"定数"はコンパイル時に静的ではないため、コンパイラは安全なことを行い、定数が宣言されるたびに初期化式を評価することがあります。
実際に問題がある場合は、コンパイラが行うことを測定します。
関連する問題
- 1. クラスの前方宣言とクラスの宣言の違いは何ですか?
- 2. SuperClassのfinal static宣言とextendedClass宣言の違いは何ですか?
- 3. Tensorflow:tf.Variableで変数を宣言し、直接宣言することとの違いは何ですか?
- 4. 宣言型との違いは何ですか?
- 5. React.jsのグローバル変数宣言のベストプラクティスは何ですか?
- 6. 変数の宣言と宣言の間に違いはありますか?
- 7. クラス変数とグローバル変数の違いは何ですか?
- 8. Pythonとグローバル宣言
- 9. Cのポインタとグローバル変数の違いは何ですか?
- 10. ウィンドウとトップのjavascriptグローバル変数の違いは何ですか?
- 11. グローバル変数と内部クラスの違いは何ですか?
- 12. Objective-Cのグローバル変数 - .mファイル宣言のexternとtopの違い
- 13. C++の変数定義と宣言を使用するグローバル
- 14. 短い変数宣言と長い変数宣言とのクロージャスコープの違いは何ですか?スペックの私の読書から
- 15. 辞書の初期化とSwiftでの宣言の違いは何ですか?
- 16. メインメソッドから変数を宣言することとメインメソッドから内部変数を宣言することの違いは何ですか?
- 17. コンストラクタのnewとメンバー宣言のnewの違いは何ですか?
- 18. 通常の関数宣言とJavascriptの内部リターンブロック関数宣言の違い
- 19. Gradleのグローバル変数宣言
- 20. XMLの "処理命令"と "宣言文"の違いは何ですか?
- 21. ゴラン宣言で「_」とは何ですか?
- 22. これら2つの宣言の違いは何ですか?
- 23. 宣言型プログラミングと命令型プログラミングの違いは何ですか?
- 24. cの型ミスマッチ関数の再宣言とは何ですか?
- 25. TypeScript:コンストラクタ内部とそれ以外の変数の宣言との違いは何ですか?
- 26. 宣言的データバインディングとは何ですか?
- 27. 「宣言形式」とは何ですか?
- 28. Objective-Cでの静的変数宣言の違いは何ですか?
- 29. Vue.jsでグローバル変数を宣言する最良の方法は何ですか?
- 30. Ext.Componentをグローバル変数として宣言できますか?
この質問をしてC++、C、Adaの質問にタグを付けるのは意味がありません。別の言語であり、答えは非常に異なります。 CまたはC++の文字列リテラル(実行時割り当てを必要としない)とC++の 'std :: string'(動的実行時割り当てを行う)をサポートします。だから、1つの言語のために投稿して、悪魔が細部に気づいているコードを見せてください。 –