7
try
{       
    if (isfull()==1)
        throw "full stack";
    else
        a[top++] = x;
}
catch (const char *s)
{
    cout<<s;
}

catch ブロックで const を使用する必要があるのはなぜですか? 使用しないと、次のエラーが発生します。

terminate called after throwing an instance of 'char const*'  
Aborted (core dumped)
4

5 に答える 5

9

文字列リテラルをスローしているため、文字列リテラルは定数メモリへのポインターと同じであるため、const.

于 2013-07-20T08:10:19.553 に答える
2

less 修飾子の変数を more 修飾子に暗黙的に割り当てることはできますが、MORE 修飾子の変数を less 修飾子に暗黙的に割り当てることはできません。

例えば

foo(char * p)
fooc(const char * p)

int main(int argc, char agrv[]) {
  const char* cp = "hello";
  char* p = new char[10];
  foo(cp); // ==> compilation error
  strcpy(p,  cp);
  fooc(p) // No probs assigning to a more qualified var
}

それが@Joachim Pileborgが正しい理由です:)

于 2013-07-20T08:27:37.397 に答える
0

それほど単純ではありません。質問は、C++ で何かを示しています。「const char*」リテラルを「char*」に割り当てることができます

char* ss = "full stack"; //ok, although "full stack" looks like a const char*

const char* s2 = "full stack";
char* ss = s2 ; //not ok

C プログラムを処理するため、C++ allow : char* ss = "full stack"; ところで。私の VS2005 コンパイラでは、何も起こりませんでした (コアダンプなし)。

void main(){

    try
    {       
        throw "full stack";
    }
    catch (char *s)
    {
        std::cout << s <<std::endl;
    }
} 
于 2013-07-20T10:05:30.897 に答える