• 締切済み

const

次の2つの宣言は同じ意味になりますか? const static char str[] = "a"; static const char str[] = "a";

みんなの回答

  • hpsk
  • ベストアンサー率40% (48/119)
回答No.1

同じですね。このような質問をされるということは、 const char *a; と、 char * const a; の意味が違うことはご存知なのだと思います。 直観的な説明をすると、質問中の宣言で、 constは型修飾子で「型」についていて、 'char'が'const'であることを言っていますが、 staticは記憶クラス指定子で「宣言」についていて、 「const char str[] = "a"」の宣言が'static'であることを言っています。 static,externなどの記憶クラス指定子は、(文法上問題ない場所なら)どこに置いても意味は同じです。 ただし、これらの指定子は宣言の一番先頭に置くことが推奨されているようです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • constの位置

    申し訳ありませんが、続けて質問させていただきます。 char const と const char は同じ意味でしょうか。 次のプログラムは配列をconst charと宣言しています。 ary[1]='N'; の行で、意図した通りにコンパイルエラーになります。 これはchar constと宣言しても、同じ意味なんでしょうか。 #include <stdio.h> int main(void) { const char ary[ ] = { 'A', 'B', 'C', '\0' }; ary[1] = 'N'; printf("aryは%s\n", ary ); return 0; } また、 const int a=1; int const a=1; この2つは同じ意味でしょうか。

  • const unsigned char *Ptn

    度々お世話になってます。VC++2010、MFC、ユニコードを使う設定で、ワイルドカードを用いたLike処理が使いたいです。 正規表現までは、望んでいません。 それで、過去ログを見てみましたが、まだ分かりませんでした。 ◆ワイルドカードを用いた文字列検索 http://okwave.jp/qa/q287644.html を使いたいです。 一応、リンク先のソースコードを載せておきます。 _________________________________________________________________________________________________ int StrMatchMBS( const unsigned char *Ptn, const unsigned char *Str ) {   switch( *Ptn )   {     case '\0':       return (_mbsnextc(Str)=='\0');     case '*':       return StrMatchMBS( _mbsinc(Ptn), Str ) || (_mbsnextc(Str)!='\0') && StrMatchMBS( Ptn, _mbsinc(Str) );     case '?': return (_mbsnextc(Str)!='\0') && StrMatchMBS( _mbsinc(Ptn), _mbsinc(Str) );     default:       return (_mbsnextc(Ptn)==_mbsnextc(Str)) && StrMatchMBS( _mbsinc(Ptn), _mbsinc(Str) );   } } _________________________________________________________________________________________________ int KeywordDlg::StrMatchMBS( const unsigned TCHAR *Ptn, const unsigned TCHAR *Str ){ としたところ、 エラー 4 error C2050: switch 式の結果は、整数値になりませんでした。 エラー 3 error C2065: 'Ptn' : 定義されていない識別子です。 ・・・のエラーがでます。 _________________________________________________________________________________________________ int KeywordDlg::StrMatchMBS( const TCHAR *Ptn, const TCHAR *Str ){ としたところ Ptn と Str の所で、赤い波線となり、 エラー 2 error C2664: '_mbsinc' : 1 番目の引数を 'const TCHAR *' から 'const unsigned char *' に変換できません。(新しい機能 ; ヘルプを参照) _________________________________________________________________________________________________ ↓この方の質問のままなのですが、具体的に どう書けばいいのか?分かりません。 ◆UNICODE化のための書き換え http://okwave.jp/qa/q6966243.html _tcsrchr もどこで使えばいいのか分かりません。 ポインターの記述を完全に理解していないせいで、分からないのでしょうか? すみませんが、もう少し、補足して頂くとうれしいですm(_ _)m

  • 文字列のメンバ変数を外部変数のように扱いたい

    済みません。質問なのですが、 メンバ変数を外部変数のように扱うにはどうしたらよいのでしょうか? int型などの場合、 class test{ static const int a; }; const int test::a = 10; とすればよいですよね? これをcharの配列にして class test{ static char a[7][32]; }; char test::a[0] = "test"; とすると サイズが0の配列を割り当てまたは宣言しようとしました というコンパイルエラーがでてしまいます…。 多次元配列の場合はstatic変数としてもてないのでしょうか? char** として宣言してもどこでnewを行えばよいか解りません。 コンストラクタの中で行えば そこでstaticではなくなってしまいますし…。 後、できればstringクラスの配列で持ちたいのですが #include <string> class test{ static string test[7]; }; string test::test[0] = "aaa"; なんてことができますでしょうか? 質問内容が解りにくいかも知れませんが どうか教えてください。 宜しくお願いいたします。

  • constについて

    void SMonster::walk(const std::string& str){ std::cout<<"てきてき"<<std::endl; power--; } のconst std::string& strと書くと効率がよいと本に書いてあったのですが、なぜ効率がいいのでしょうか?

  • constについて

    このプログラム(一部分)ではconst指定されたものを変更しているように思うのですが ポインタで操作しているからconst指定されている物を変更できるのでしょうか。 int main( int argc, char** argv ){ const char* filename = "stageData.txt"; if ( argc >= 2 ){ filename = argv[ 1 ]; }

  • const 回りのエラー?

    以下のプログラムをcygiwn 上でコンパイルすると エラーが出るのですが 何がいけないのかよくわかりません。 メッセージを読んでconst 回りなのかな?とは思っているのですが… よろしくお願いします。 #include<iostream> #include<cstring> #include<cstdlib> using namespace std; class sample{ char *s; public: sample(); sample(const sample &ob); ~sample(){if(s) delete [] s; cout << "Freeing s\n";} void show(){cout << s << "\n";} void set(char *str); sample operator=(sample &ob); }; sample::sample() { s = new char('\0'); if(!s){ cout << "Allocation error\n"; exit(1); } } sample::sample(const sample &ob) { s = new char[strlen(ob.s)+1]; if(!s){ cout << "Allocation error\n"; exit(1); } strcpy(s,ob.s); } void sample::set(char *str) { s = new char[strlen(str)+1]; if(!s){ cout << "Allocation error\n"; exit(1); } strcpy(s,str); } sample sample::operator=(sample &ob) { if(strlen(ob.s)>strlen(s)){ delete [] s; s = new char[strlen(ob.s)+1]; if(!s){ cout << "Allocation error\n"; exit(1); } } strcpy(s,ob.s); return *this; } sample input() { char instr[80]; sample str; cout << "Enter a string: "; cin >> instr; str.set(instr); return str; } int main() { sample ob; ob = input(); ob.show(); return 0; } <コンパイル結果> In function 'int main()': 78:error:no match for 'operator=' in 'ob = input()()' 49:note:candidates are: sample sample::operator=(sample&)

  • constの意味

    constは値を変化させないものと習いました。 constとstaticを組み合わせて使うことはありますか? もしあったらどういった場合に2つを使用するのか教えてください。

  • CやC++に今後追加して欲しい機能ってありますか?

    個人的にC言語はC++があるので今のままでいいと思いますが、 C++には class Test_c {  static const int VarI = 10; //これは従来もOK  static const float VarF = 10.5; //これは整数以外なのでアウト  static const char * Str1 = "テスト文字列" //これもアウト public: } 見たいにフィールドで整数以外のstatic constもできるようにして欲しいです。

  • 前回質問させて頂き、改善できるところはしました。

    前回質問させて頂き、改善できるところはしました。 再度駄目な所をご指摘お願いします。 仕様は出来るだけ標準関数に近いものを自作したいと思っています。 //---------------------------- MyStrstr ----------------------------------// char *MyStrstr(const char *str1, const char *str2) { const char *p1 = str1; const char *p3 = str1; const char *p2 = str2; while(*p1 != *p2 && *p1 && *p2) { *p1++; *p3++; } while(*p1 == *p2){ *p1++; *p2++; } return (*p2 ? NULL : (char*)p3); } //------------------------------ 終了 ------------------------------------// //---------------------------- MyStrcat ----------------------------------// char *MyStrcat(char *str1, const char *str2) { char *p1 = str1; const char *p2 = str2; while(*p1 != NULL){ p1++; } if(*p2){ while(*p2 != NULL){ *p1 = *p2; p1++; p2++; } } if(*p2 == NULL){ *p1 = *p2; } return p1; } //------------------------------ 終了 ------------------------------------// //---------------------------- MyStrcmp ----------------------------------// int MyStrcmp(const char *str1, const char *str2) { const char *p1 = str1; const char *p2 = str2; while(*p1 != NULL || *p2 != NULL){ if(*p1 == *p2){ p1++; p2++; }else{ if(*p1 < *p2) return -1; if(*p1 > *p2) return 1; } } return 0; } //------------------------------ 終了 ------------------------------------// //----------------------------- MyMemcpy -----------------------------------// void *MyMemcpy(void *str1, void *str2, size_t n) { char *p1 = (char*)str1; char *p2 = (char*)str2; while(n--){ *p1 = *p2; p1++; p2++; } return str1; } //------------------------------ 終了 ------------------------------------// //---------------------------- MyStrcpy ----------------------------------// char *MyStrcpy(char *str1, const char *str2) { char *p1 = str1; const char *p2 = str2; while( *p2 != NULL){ *p1 = *p2; p1++; p2++; } if(*p2 == NULL){ *p1 = *p2; } return p1; } //------------------------------ 終了 ------------------------------------// //---------------------------- MyMe

  • Constステートメントの使い方

    Constステートメントの使い方 VBAをはじめて1か月の初心者です。 Constは定数を宣言するステートメントと聞きます。 ある参考書から以下のコードを抜粋しました。 Const シート名 = "商品一覧!" Const リスト先頭 = シート名 & "B4" 1.「シート名」は商品一覧とする。 2.「リストの先頭」は商品一覧のB4セルとする。 ということになると思いますが、ここで質問です。 1."商品一覧!"の「!」はどういう意味でなぜ付いているの でしょうか? 2.例えば上記の宣言を Const シート名1 = "商品一覧!" Const リスト先頭1 = シート名1 & "B4" Const シート名2="顧客一覧!" Const リスト先頭2 = シート名2 & "B4" という記述にしてsheet3の顧客一覧を定数として 宣言することは可能でしょうか? (もちろんsheet3には予め顧客一覧の表を入力し、 当初のコードに合わせた改良コードは用意するつもりです) ※ユーザーフォームから納品書を入力するためのサンプル コードの一部を抜粋しています。sheet1には納品書、sheet2には 商品一覧の表が既に用意されています。 以上、よろしくお願いします。

このQ&Aのポイント
  • lavie direct A23 を利用していますが、ユーザー切り替えができません。スタートをクリックし、ユーザー変更を試みますが、変更画面が一瞬表示された後、もとのユーザー画面に戻されてしまいます。
  • この問題の解決方法を教えていただけないでしょうか?お願いします。
  • NEC 121wareのWindowsに関する質問です。
回答を見る