2
我確信我的問題已經在這裏回答了,但我無法找到它。如果是這樣,請將其標記爲重複 - 謝謝!重複的構造函數調用
這裏是MCVE:
#include <map>
#include <stdio.h>
using foo = struct foo
{
int foo2;
foo() { printf("In foo contructor.\n"); }
};
std::map<int, foo> bar;
int main()
{
bar [1] = {};
}
輸出:
In foo contructor.
In foo contructor.
爲什麼叫兩次foo
構造?爲了只被調用一次,我必須改變什麼?
編譯:gcc 4.9.3
編譯器標誌:-O3 -std=c++11 -Wall -Werror -Wextra
OK。我知道我需要時間直到我理解整個機制。用'emplace()'它可以工作。謝謝! –
@AlBundy在cppreference上查看'std :: map :: operator []'和'std :: map :: operator ='的文檔。這些文章將幫助您瞭解如何以及何時在'std :: map'內部創建對象。 – KABoissonneault
@KABoissonneault,我知道有一次'bar'操作,那是什麼時候?爲了'{}'構造一個'foo'對象? – BlackMamba