最近,我意识到,你可以使用GCC和铛三元运营商没有中间(?:或? :工程),它会插入第一个表达式到中:
// outputs 2
cout << (2 ?: 4);
// outputs 3
cout << (0 ? : 3);
Run Code Online (Sandbox Code Playgroud)
这个标准在哪里?我看了,没看到任何关于它的事.
我正在阅读以下内容的区别:
1)
std::string test = level > 10 ? "Master" : "Beginner";
Run Code Online (Sandbox Code Playgroud)
2)
std::string test;
if (level > 10)
test = "Master";
else
test = "Beginner";
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,我被告知在第二种选择中,正在创建一个我不理解的临时值。
我了解到,当我们在没有初始化的情况下声明一个变量时,它会占用垃圾,因此编译器只保存一个内存位置,而不会“工作”来更改其值。
我有一种情况,我想在三元运算符中使用 await。我想根据条件将值设置为字面值或承诺的解析值。希望下面的代码能帮助描述我想要做什么,但我很确定它不正确,所以考虑它是伪代码。
const val = checkCondition ? "literal value" : await promiseGetValue();
Run Code Online (Sandbox Code Playgroud)
其中 promiseGetValue() 返回一个解析为文字值的承诺。这样做的正确方法是什么?
最近在一段Java代码中看到了这个三元运算语句:
int getVal(Integer number, boolean required) {
Integer val = number == null ? required ? 1 : 2 : 3;
return val;
}
Run Code Online (Sandbox Code Playgroud)
我从未见过像这样连续有两个问号的三元语句(没有任何括号)。如果我使用输入值,我可以1返回 ifnumber == null并3返回,但似乎不需要什么,2永远不会返回。
这个语句是什么意思(即我应该如何将它读作true/false条件的单词语句)以及需要2返回的输入是什么?
代码
#include<iostream>
int main()
{
int a=4,b,c;
a==3 ? : b=a*a ; // Works fine
a==4 ? c=a*a : ; // ERROR Expected Primary expression before ;
}
Run Code Online (Sandbox Code Playgroud)
第一个条件语句
我没有写“表达式 2 ”,但它不会产生错误
第二个条件语句
我没有写“表达式 3 ”,它给出了一个错误
那么为什么它在“表达式 2 ”和“表达式 3 ”中有所区别?
考虑以下无用的代码片段,它在不同的编译器中给出不一致的结果(演示)
\n#include <type_traits>\n\nchar* dummy;\nconst char* const& a = dummy;\n char* & b = dummy;\nusing T = decltype(true ? a : b);\nstatic_assert(std::is_same<const char* const&, T>::value); // pass in Clang and MSVC:c++20\nstatic_assert(std::is_same<const char* , T>::value); // pass in GCC and MSVC:c++17\nRun Code Online (Sandbox Code Playgroud)\nGCC认为T存在const char*于C++的所有版本中,而Clang认为存在const char* const&于所有版本中;MSVC 认为T在const char*C++17 和const char* const&C++20 下。
从语言律师\xe2\x80\x99s的角度来看,我应该相信哪个编译器?
\n我在使用条件运算符获取对象的引用时遇到了一些麻烦.我有一个类似于这样的设置:
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) 使用'?:'条件和简单的'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
我尝试使用新编译器编译旧代码并得到下一个错误:
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) 我有一个<div>块需要设置display:none或display:block基于条件.html看起来像这样,
<div style="display:none;">
//some html block content
</div>
Run Code Online (Sandbox Code Playgroud)
我在百里香试过了以下代码,
<div th:style="${condition} == 'MATCH' ? display:block : display:none">
//some html block content
</div>
Run Code Online (Sandbox Code Playgroud)
但上面的表达不起作用.抛出org.thymeleaf.exceptions.TemplateProcessingException: Could not parse as expression:错误信息.
我可以th:classappend设置一些课程并完成这项工作,但想知道elvis/ternary操作员是否会支持thymeleaf th:style标签.
c++ ×5
gcc ×2
addressof ×1
async-await ×1
c ×1
clang ×1
conditional ×1
es6-promise ×1
if-statement ×1
inline-if ×1
java ×1
javascript ×1
objective-c ×1
ternary ×1
thymeleaf ×1