这个GitHub文件中的代码使用了一种我不熟悉的C++变量"声明"语法。
我提取了一个最小的测试案例,可以编译。
将
错误:将临时变量用作左值[-fpermissive]
std::unique_ptr<CRecentFileList> {m_pRecentFileList} = std::make_unique<CRecentFileList>(...
(m_pRecentFileList
在一个超类中声明。)
当你用大括号包裹一个变量声明时,这意味着什么?(不是初始化列表)
我提取了一个最小的测试案例,可以编译。
class foo {
int* p;
void f(){
std::unique_ptr<int> {p} = std::make_unique<int>(1);
}
};
将
int* p
改为 std::unique_ptr<int> p
会导致编译错误,原因是 unique_ptr(const unique_ptr&) = delete;
这让我想到花括号声明会将同名的外部作用域变量赋值。我尝试创建了一个测试程序,但它无法编译通过。int main(){
int x;
int {x} = 1;
}
错误:将临时变量用作左值[-fpermissive]
int {x} = 1;
尝试得不错。加1。 - Jarod42