我在使用条件运算符获取对象的引用时遇到了一些麻烦.我有一个类似于这样的设置:
class D
{
virtual void bla() = 0;
};
class D1 : public D
{
void bla() {};
};
class D2 : public D
{
void bla() {};
};
class C
{
public:
C()
{
this->d1 = new D1();
this->d2 = new D2();
}
D1& getD1() {return *d1;};
D2& getD2() {return *d2;}
private:
D1 *d1;
D2 *d2;
};
int main()
{
C c;
D& d = (rand() %2 == 0 ? c.getD1() : c.getD2());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译时,这给了我以下错误:
WOpenTest.cpp: …Run Code Online (Sandbox Code Playgroud) 这将无法编译,说明"无法确定条件表达式的类型,因为'System.DateTime'和''"之间没有隐式转换
task.ActualEndDate = TextBoxActualEndDate.Text != "" ? DateTime.Parse(TextBoxActualEndDate.Text) : null;
Run Code Online (Sandbox Code Playgroud)
这很好用
if (TextBoxActualEndDate.Text != "")
task.ActualEndDate = DateTime.Parse(TextBoxActualEndDate.Text);
else
task.ActualEndDate = null;
Run Code Online (Sandbox Code Playgroud) 一个小问题.任何想法的人为什么这不起作用?
int? nullableIntVal = (this.Policy == null) ? null : 1;
Run Code Online (Sandbox Code Playgroud)
null如果左手表达式为True,我试图返回,否则1.看似简单,但给出了编译错误.
无法确定条件表达式的类型,因为null和之间没有隐式转换int.
如果我用任何有效的替换nullin ,那么没有问题.? null : 1int
可能重复:
什么'?' 用C++做什么?
c ++中的这些语句叫做什么:
testNumber > 1 ? true : false;
Run Code Online (Sandbox Code Playgroud) 我曾经见过C++,其分配值的-wired-操作者如果比..更大
它的组合?,<和=
例如,如果value大于x,则x = value
我不是故意的 x=(x<value)x:value
这是某种形式 x<?=value
但我完全记不起来了,也无法在网上找到它......有人能提醒我吗?
谢谢,
我怎样才能'b' => 'xyz'在array()语句中有条件地添加下面的数组?
$arr = array('a' => abc)
三元运算符不允许我这样做
可能重复:
Python检查列表中是否包含以下所有项目
所以我想测试word和word1是否都在列表中.当然,我可以写:
if word in lst and word1 in lst:
do x
Run Code Online (Sandbox Code Playgroud)
但我想知道我是否可以将该陈述缩短为:
if (word and word1) in lst:
do x
Run Code Online (Sandbox Code Playgroud)
当然,这不起作用,但有什么有效的相似之处呢?
我尝试了以下内容,但正如您所看到的,它不会产生预期的结果.
>>> word in lst
True
>>> word1 in lst
True
>>> (word, word1) in lst
False
Run Code Online (Sandbox Code Playgroud)
编辑:谢谢你的答案,我想我现在已经很清楚如何做到这一点.
使用'?:'条件和简单的'if-then-else'语句之间有区别吗?它只是另一种方式,或者它实际上使用更少的空间/花费更少的时间来阅读比'if'语句?
例:
如果声明:
if (item1.isEqualToString:@"2") //If statement
[self doSomething];
else
[self doSomethingElse];
item1.isEqualToString:@"2" ? [self doSomething] : [self doSomethingElse]; //'?:' statement
Run Code Online (Sandbox Code Playgroud) conditional if-statement objective-c conditional-operator inline-if
int a=2, b=22;
a>b?a:b=222;
Run Code Online (Sandbox Code Playgroud)
这段代码给了我一个错误.我认为这是因为条件运算符返回值a或b基于条件的值,因此该值不能用作Lvalue.就我而言,22 = 222,所以这是一个错误.
int *i, *j, a=2,b=222;
i = &a;
j = &b;
a>b?i:j=&a;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,编译器也会抛出错误.根据我的假设,与前一种情况一样,这里返回值为i或j.所以0x123 =&a; [让0x123是存储在j中的地址].无效吗?
此时,我进行了搜索.我尝试过0x123 = &a;,但编译器仍然会抛出错误.我想编译器不允许我出于安全原因修改内存位置.
请让我知道我的所有假设都是有效的,并告诉我如果允许程序员操作内存位置会发生什么安全错误.我假设内存位置可能包含不应修改的值.
编辑
错误是error: lvalue required as left operand of assignment.
我尝试使用新编译器编译旧代码并得到下一个错误:
error: cannot take the address of an rvalue of type 'int'
Run Code Online (Sandbox Code Playgroud)
下面是两行示例 - 一行编译,另一行编译错误
struct mstct {
int myfield;
int myfield2[5];
int myfield3[5];
};
typedef struct mstct db_data_px;
int foo(int a, int b, int c){
//the next code compiles successfully.
unsigned val1 = ((18 == c) ? ((unsigned) & (((db_data_px *) 0)->myfield)) : ((unsigned) & (((db_data_px *) 0)->myfield3[b]))); //successes
//the next code is failing
unsigned val2 = (unsigned) & ((18 == c) ? (((db_data_px *) 0)->myfield) : (((db_data_px *) …Run Code Online (Sandbox Code Playgroud) c ×3
c++ ×3
c# ×2
conditional ×2
nullable ×2
.net ×1
addressof ×1
arrays ×1
gcc ×1
if-statement ×1
inline-if ×1
objective-c ×1
operators ×1
php ×1
python ×1
python-3.x ×1