C++ Can';t推导常数auto&;

C++ Can';t推导常数auto&;,c++,auto,C++,Auto,我有以下代码行,非常有效: const auto& dict = m_DictionaryAbbreviationsAndEnglish.Content; 现在我想引入一个“if-then”子句,但编译器告诉我“不能推断‘auto’类型(需要initalizer): 但是,当我像这样初始化它时 const auto& dict=NULL; …,我无法使用这样的代码分配“dict”: dict = m_DictionaryNoAbbreviationsNoEnglish.Con

我有以下代码行,非常有效:

const auto& dict = m_DictionaryAbbreviationsAndEnglish.Content;
现在我想引入一个“if-then”子句,但编译器告诉我“不能推断‘auto’类型(需要initalizer):

但是,当我像这样初始化它时

const auto& dict=NULL;
…,我无法使用这样的代码分配“dict”:

dict = m_DictionaryNoAbbreviationsNoEnglish.Content();
错误是“表达式必须是可修改的左值。”

有人能告诉我怎么做才对吗

多谢各位

ps:内容如下:

map<wstring,wstring> &clsTranslations::Content()
{
    return m_content;
}
map&clsTranslations::Content()
{
返回m_内容;
}

这就是条件运算符的作用:

const auto& dict = uSkipAbbreviationsAndEnglish ? 
                   m_DictionaryNoAbbreviationsNoEnglish.Content() : 
                   m_DictionaryAbbreviationsAndEnglish.Content();

不要在这里使用
auto
,这可能不值得。您无法重新分配引用。请查看。必须初始化常量auto才能从其初始化中获取其类型。它需要在声明中初始化才能推断类型。当您为其分配NULL时,它将获取NULL类型,可能是
int
unsigned int
nullptr\u t
,只要它的计算结果为0并且可以转换为任何类型的指针(在C++11之前。在C++11之后,它需要是
nullptr\u t
)。此外,正如其他人所说,常量必须在声明时初始化,因为根据定义,它们是常量,并且在声明后不能更改。
const auto& dict = uSkipAbbreviationsAndEnglish ? 
                   m_DictionaryNoAbbreviationsNoEnglish.Content() : 
                   m_DictionaryAbbreviationsAndEnglish.Content();