なぜ最初のものが参照を返すのですか? int x = 1; int y = 2; (x > y ? x : y) = 100; 2番目はありませんか? int x = 1; long y = 2; (x > y ? x : y) = 100; 実際、2番目はまったくコンパイルされませんでした-「割り当ての左辺値ではありません」。
int main () { int a = 5,b = 2; printf("%d",a+++++b); return 0; } このコードにより、次のエラーが発生します。 エラー:増分オペランドとしてlvalueが必要です しかし、と全体にスペースを入れるa++ +と++b、問題なく動作します。 int main () { int a = 5,b = 2; printf("%d",a++ + ++b); return 0; } 最初の例でエラーは何を意味しますか?
次のコードを考えてみましょう: int main() { int i = 2; int b = ++i++; return 3; } 次のエラーでコンパイルされます。 <source>: In function 'int main()': <source>:3:16: error: lvalue required as increment operand 3 | int b = ++i++; | ^~ これは私には公平に聞こえます。後置インクリメントはコードのように解析されて、接頭増分よりも高い優先度を有するint b = ++(i++);とi右辺値です。したがってエラー。 デフォルトの優先順位を上書きするために、括弧を付けたこのバリアントについて考えてみましょう。 int main() { int i = 2; int b …
例: typedef enum Color { RED, GREEN, BLUE } Color; void func(unsigned int& num) { num++; } int main() { Color clr = RED; func(clr); return 0; } これをコンパイルすると、次のエラーが発生します。 <source>: In function 'int main()': <source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' to an rvalue of type …