今天偶然用到string, 发现string的析构函数特别奇怪, 直接调用居然报错, 代码如下 :
int main(int argc, char* argv[]) {
std::string x = "123";
x.~string();
return 0;
}
这是报错信息 :
/Users/zhangzhimin/ClionProjects/geek/main.cpp:16:8: error: identifier 'string' in object destruction expression does not name a type
x.~string();
求解答.
2階で何が面白いの?
正しい答えは、std::string は実際には
リーリーstd::basic_string<char>
の単なる typedef であるため、そのデストラクターを調整したい場合は次のようにします:さらに、文字列は新しいものではないため、分解する必要はありません
あなたは私の注意を引くことに成功しました。 。 。以前に
using
ステートメントで名前空間を開いていない場合、デストラクターの呼び出しは次のように記述する必要があります:x.std::string::~string();
内のオブジェクトを手動で破棄するためにこれを書いたと思います。空間コンフィギュレーターああ、string は確かに Basic_string<> の typedef から派生していますが、string は ~string() を直接呼び出すことができます。このトピックは、std 名前空間の欠如が原因である可能性があります。実践は真実をテストするための標準です。私はコンパイルして正常に実行してみました。タイトル http://www.cplusplus.com/refe...
の説明です。 リーリー