c++中给const QList赋值其他的事情
c++ assign value to a const QList in if... else
我想根据指针的值给const QList
分配一个值。
invar
是一个指针,如果它是NULL
,我想给const QList mylist
分配第一个值,如果它不是NULL
,另一个值。但是要注意const的正确性:我不打算在之后更改mylist
的值。
是否可能有
if(invar)
const QList<Type> zoneList = invar->getZones();
else
const QList<Type> zoneList = aList ;
我定义了zoneList
一次,所以为什么这不能工作呢?
另外,由于我在方法的下一部分使用zoneList
,我得到了这个编译错误:undeclared identifier
.
但是我也不能写
const QList<Type> zoneList ;
if(invar)
zoneList = invar->getZones();
else
zoneList = NULL ;
和我有编译错误错误1
error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const QList<T>' (or there is no acceptable conversion)
是否有可能有两个不同的值分配给这个const QList取决于一个条件?那么正确的写法是什么呢
使用三元运算符?:
const QList<Type> zoneList(invar ? invar->getZones() : aList);
BTW是NULL
还是aList
?在上面的代码中都有。
if(invar)
const QList<Type> zoneList = invar->getZones();
else
const QList<Type> zoneList = aList ;
不能工作,因为每个zoneList变量只在if语句中定义。
对于这样一个简单的条件,您可以只使用三元操作符:
const QList<Type> zoneList = invar ? invar->getZones() : aList;
如果初始化比这更复杂,而您恰好使用c++ 11,那么您可以使用lambdas提供的新习惯用法:
const QList<Type> zoneList = [] () -> QList<Type> {
// ^^ possibly [&] to capture variables
// some complex stuff that returns a QList<Type>
}(); // Note the () that calls the lambda immediately
如果你被c++ 03(或者,Stroustrup禁止,c++ 98)困住了,除了调用另一个函数/方法之外,几乎没有其他解决方案,缺点是你必须将计算const值所需的任何局部变量作为参数传递。
编辑:我意识到我还没有完全回答你的问题。其他人已经解释过,你的第一个if
不能工作,因为这是一个作用域的问题,我不会添加太多,除了添加大括号可能会让你更清楚(注意这是如何严格地与你的代码相同:当if
/else
主体只是一个语句时,大括号是可选的,但它们的存在/不存在不会改变代码的语义):
if (invar) {
const QList<Type> zoneList = invar->getZones();
}
else {
const QList<Type> zoneList = aList;
}
如果你这样做
if(invar)
const QList<Type> zoneList = invar->getZones();
else
const QList<Type> zoneList = aList ;
zoneList
的作用域仅限于if
或else
分支,在它之外不再存在。
如果你做了
const QList<Type> zoneList ;
if(invar)
zoneList = invar->getZones();
else
zoneList = NULL ;
zoneList
声明为const
,不能在if
/else
中修改。
对于一个hack,你可以使用const_cast
,但这是不好的做法,所以你必须初始化zoneList
。
zoneList = invar != 0 ? invar->getZones() : 0; //don't use NULL in C++
- 为"adjacent"变量赋值时出现问题
- C++中的赋值发生,尽管右侧出现异常
- 用C++中的sscanf赋值
- 为std::string的某个索引赋值
- 重载Singly Linked List中的赋值运算符
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- gtest_使用setargpointee在函数中赋值
- 非常量变量只读位置的赋值
- 使用赋值运算符重载从类中返回jobject
- C++数据文件、数组和计算赋值
- 如何使用其他函数返回的值为结构体成员赋值
- 赋值重载显式调用析构函数(在执行其他二进制重载运算符之后)
- 为结构的字段赋值,也更改其他变量
- 变量赋值并传递给其他函数
- 左键需要作为赋值的左操作数?查看其他线程无济于事
- 如何禁止从其他类型向临时对象赋值和隐式强制转换
- 变量赋值覆盖其他变量的值
- C++11当递增原子变量,并将其赋值给其他值时,就是原子操作
- c++中给const QList赋值其他的事情
- 重载赋值操作符和其他操作符的区别是什么?