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();