クラスメンバの無名共用体のstd::string

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: クラスメンバの無名共用体のstd::string

Re: クラスメンバの無名共用体のstd::string

#3

by aguna » 6年前

なるほど!構造体と同じようにはできないんですね!
unionは謎だらけですね…
どうもありがとうございました!

Re: クラスメンバの無名共用体のstd::string

#2

by sleep » 6年前

共用体の制限解除(C++11)
・共用体の非静的メンバ変数として定義されている非自明なコンストラクタおよびデストラクタを持つ型のオブジェクトに対しては、配置new構文でオブジェクトを構築し、明示的にデストラクタを呼び出す必要がある

コード:

#include <iostream>
#include <string>
using namespace std;

class A
{
public:
	A() {};
//	~A() {};
	~A() { str2.~basic_string(); };
	std::string str1;
	union { std::string str2; };
};

int main() {
	A a;
	a.str1 = "Hello";
//	a.str2 = a.str1;
	new (&a.str2) std::string{ a.str1 };
}

クラスメンバの無名共用体のstd::string

#1

by aguna » 6年前

このコードが実行時エラーになるのですが、仕様でしょうか?
環境は、VC++ visualstudio2017です。

コード:

#include <iostream>
#include <string>
using namespace std;

class A
{
public:
	A() {};
	~A() {};
	std::string str1;
	union	{ std::string str2; };
};

int main() {
	A a;
	a.str1 = "Hello";
	a.str2 = a.str1;
}
最後の代入のところでエラーになります。

ページトップ