++(A++) 연산에서 오류가 발생합니다.

dltkddyd의 이미지

++(A++);//이 연산에서 오류가 발생합니다. 이 연산 통상 될 것이라고 생각하는데요.

이런 연산이 안된다는 것은 문제가 있다고 봅니다. 보통 사용자가 저런 연산을 할 때
에는 두 번 증가될 것이라고 예상하지 않을까요? 이 연산 때문에 오류가 발생하면 이러한 기대는 무너집니다.

#include <iostream>
using namespace std;
 
int main() {
	int A=0;
	++(A++);//여기서 오류가 발생
	cout<<A<<endl;
	return 0;
}

보통 전위 연산이

const int operator ++(int dummy)

식이라고 했을 때(보통 저런 꼴이라 하더군요) 두 번째의 전위연산에서 그 상수로 반환된 값을 변경하려 하기 때문에 오류가 발생하는것은 당연하지만, 그래도 사용자의 입장에서는 저런 연산이 직관적으로 가능할 것이라고 기대하지 않을까요. 저런연산 안 되는 것이 C++표준에 따른 것인지 궁금합니다.

klyx의 이미지

A += 2보다 ++(A++)이 직관적인가요?
'통상', '기대', '직관' 어느것 하나 공감하기 어려운 단어 선택들이네요.

익명 사용자의 이미지

적절한 전문지식을 갖추지 못한 사람이 막연히 될꺼라고 생각하는 거에
C++ 언어의 표준 정의를 맞출 수는 없습니다.

학습의 용이함이나 비전문가의 일상개념에 부합하는 정도, 동작의 엄밀한 정의나 이식성이
프로그래밍 언어에 있어서 늘 우선되는 목표는 아닙니다.

아직 충분한 학습이 되지 않은 상태로 내가 생각하는게 맞다고 막 우기셔도
소용은 없어요. 거기엔 아무런 가치도 없습니다.

++(A++)가 안되는 이유는 C++ 표준에 따른 겁니다.

5.2. Postfix expressions 6. Increment and decrement
The result is an rvalue.
 
5.2. Unary expressions 2. Increment and decrement
 
The operand shall be a modifiable lvalue.

안되는 이유는 자명하죠?

그것보단 ++(++A)가 왜 C에선 안되고 C++에선 되는지를 생각해 보시는게
건설적인 질문이 될 것 같군요.

HDNua의 이미지

처음에는 저 문장이 적합하지 않다는 것을 예시로 설명하려고 했었는데
지금 보니 이 답변이 제일 맞는 것 같네요.

예시는 참고로만 달겠습니다. 좋은 답변 잘 읽었습니다.

저는 이렇게 생각했습니다.

dltkddyd의 이미지

왜 저런 연산이 안 되는지는 알고 있습니다. 상수가 다시 전위연산자의 매개변수로 전달되고 그 안에서 상수를 수정하려 하니 오류가 발생하는 것은 당연하겠죠. 그것을 질문드린 것이 아니라

++(A++)

이 안되고 있는데, 통상 사용자는 저런 것이 될 것이라 기대하지 않을까요? 보통 연산자라는 것은 그 원형을 알지 못하더라도 부호만 알고 있으면 사용할 수 있도록 하기 위해 사용하는 것이죠. 그런데 저런 것이 안 된다는 것을 이해하려면 기본적인 +연산자에 대해서도 선언이 어떻게 돼있으며 내부에서 상수를 조작하려 하는지 아닌지에 대해서도 알아야 합니다. 그렇다면

++

이라는 연산자는 프로그래머(사용자)가 연산자에 대한 상세한 사항을 알고 있어야 함을 의미하는 것이죠. 기본적인 전역 연산자에서도 프로그래머가 일일히 다 알고 있어야 한다는 것이네요.

(A++)++;

이것도 마찬가지로 안 되는 이유는 자명합니다. 연산자가 위와 같이 정의돼 있기 때문이겠죠. 그런데 후위연산자를 사용하기 위해서 저런 것을 다 숙지하고 써야 한다는 것이죠.
'후위연산자'라는 것은 겹쳐서 쓰면 안되는 연산자다라고 암기를 해야되는 사항이군요. 가급적 후위연산자는 쓰는(겹쳐서 쓸 요량이면) 것을 지양하겠습니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

이제보니 질문을 한 것이 아니라 이미 원하는 답이 정해져 있고 다른 사람들이 거기에 YES라고 대답하기를 원했던 모양이군요.

다시 똑같은 말을 해 드리겠습니다. "학습의 용이함이나 비전문가의 일상개념에 부합하는 정도, 동작의 엄밀한 정의나 이식성이 프로그래밍 언어에 있어서 늘 우선되는 목표는 아닙니다."

dltkddyd의 이미지

"후위연산자 연속으로 쓰면 좋은 꼴을 보지 못한다. 알고 써야한다."는 것이군요. 그러니 받아들여라. 이 연산자는 이렇다라는 사실을...?

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

dltkddyd의 이미지

언급하지 않은 말을 하지 마시기 바랍니다. 맞다고 진작에 우겼으면 저런 질문 올리겠습니까?

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

dltkddyd의 이미지

처음부터 C++로 입문해서 C++과 C를 비교할 실력은 안 됩니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

HDNua의 이미지

1. 다음은 정수를 표현하는 클래스 Integer의 정의입니다. Integer& operator ++(int)를 구현해보세요.

#include <iostream>
using namespace std;
 
class Integer {
 int value;
public:
 Integer(int value=0): value(value) {}
 Integer& operator ++() { ++value; return *this; }
 Integer& operator ++(int) {
  // 후위 ++ 연산자는 자기 값은 증가시키면서
  // 결과로는 증가 이전의 값을 반환해야 하는데,
  // 이 때 무엇을 반환해야 한다고 생각하시나요?
  return *this;
 }
 int getValue() const { return value; }
 void setValue(int value) { this->value = value; }
};
 
int main() {
 Integer i = 0;
 ++(i++); // i++를 실행하면 i의 value는 0이어야 맞습니다.
 printf("%d\n", i.getValue());
 return 0;
}

시프트 연산자를 쓰면 부등호가 이상하게 나와서 마음에 안 드네요. 그냥 printf 썼습니다.

저는 이렇게 생각했습니다.

dltkddyd의 이미지

지역을 반환하는 것이죠. 지역을 만들어서 반환해야 하는 것입니다. 후위 연산자라는 것은요. 그런 한심한 수준의 질문을 올리시는군요. 예시 틀리게 올렸군요. 어떻게 후위연산자의 내부 정의를 모르십니까. 난 알고 질문드린 것인데. 한심합니다. 어떤 기본서에서도 "후위연산자 겹쳐서 쓰지 말아라."라는 내용을 본 적이 없습니다. 전문가라는 집단이라는 것이 참 배려심도 없군요. 저런 사항에 대해 아무런 설명도 없이.
님께 역으로 질문드리겠습니다. 언급하신 연산자의 어디를 고쳐야 할까요? 난 이미 알고 있는데.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

보통 지역으로 번역되는 local은
C/C++나 기타 프로그래밍 언어에서 scope의 개념으로 사용되지
storage duration의 개념으로 사용되지는 않습니다.

지역은 대체 무슨 의미로 어떤 맥락에서 쓰신 용어인가요?

dltkddyd의 이미지

저 예문이 맞다고 생각하십니까? 저 예문에서 후위연산자는 새 객체를 반환해야 합니다. 전 새 객체를 반환하지 않고 후위연산자를 구현할 수 없는지에 대해서 질문을 드린 거고요. 아마 저 분 알고 계실겁니다. 질문 내용을 봐서는 분명 알고 반문을 한 겁니다. 저것은 틀린 예문인 것을요.
그리고 님이 무슨 말씀 하시는지 알겠습니다. 전역에서 객체를 선언하면 전역이고, 지역에서 객체를 선언하면 지역이 되는데, 무슨 지역을 언급하느냐는 말씀이시죠? 지역변수가 아니라 새 객체라고 하는 편이 낫겠군요. 새로운 객체를 선언해서 반환해야 합니다.
아마 이리 세게 나오시는 것을 보면 후위연산자에서 선언된 객체를 반환하지 않고 후위연산자를 구현할 수 있는 방법은 없다라는 뜻으로 들리네요. 그렇죠?

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

HDNua의 이미지

1. 해결 방법이야 간단한 것이죠. 논리적인 이야기입니다.

#include <iostream>
using namespace std;
class Integer {
 int value;
public:
 Integer(int value=0): value(value) {}
 Integer& operator ++() { ++value; return *this; }
 Integer& operator ++(int) { return *this; }
 int getValue() const { return value; }
 void setValue(int value) { this->value = value; }
};
int print(const Integer& i) {
 printf("%d\n", i.getValue());
}
int main() {
 Integer i = 0;
 print(i++);      // 일반적인 후위 ++ 연산자라면 당연히 이 출력의 결과는 0입니다.
 print((i++)++);  // 그렇다면 이 경우 print의 출력은 무엇이 되어야 합니까?
 return 0;
}

이건 프로그래머가 구현하기 나름입니다. 예를 들어볼게요.
#include <iostream>
using namespace std;
 
class Integer1 {
 int value;
public:
 Integer1(int value=0): value(value) {}
 int getValue() const { return value; }
 void setValue(int value) { this->value = value; }
 Integer1& operator ++() { ++value; return *this; }
 const Integer1 operator ++(int) { // 일반적인 구현입니다.
  Integer1 i = *this;
  ++value;
  return i;
 }
};
int print(const Integer1& i) {
 return printf("%d\n", i.getValue());
}
class Integer2 {
 int value;
public:
 Integer2(int value=0): value(value) {}
 int getValue() const { return value; }
 void setValue(int value) { this->value = value; }
 Integer2& operator ++() { ++value; return *this; }
 Integer2 operator ++(int) {
  // 반환 값에서 const를 빼서 (i++)++ 연산이 가능해집니다.
  // 다만 반환된 건 임시 객체이므로 이 값을 증가시켜봤자
  // 대개는 의미 없는 연산으로 끝납니다.
  Integer2 i = *this;
  ++value;
  return i;
 }
};
int print(const Integer2& i) {
 return printf("%d\n", i.getValue());
}
 
int main() {
 Integer1 i1 = 0;
// print((i1++)++);
 
 Integer2 i2 = 0;
 print((i2++)++);
 
 return 0;
}

제 답변은 후위 증가 연산자는 연산 후에 자신이 아닌 것을 반환하기 때문에
연산자를 겹쳐쓰는 경우 어떤 것이 타당한 값인지가 논리적으로 애매모호하다는 이야깁니다.
후위 증가 연산자는 자신의 값이 변하기 전에 돌려주면서 자신의 값은 변해야 하니까요.
따라서 "이렇게 애매한 것이니 아예 문법적으로 막아버리자!"
이런 식으로 받아들이시면 이해하기 수월하지 않을까 해서 남긴 답변입니다.

2. tunecolor님의 질문 내용을 다시 파헤쳐봤습니다.
[본문]
// ++(A++);//이 연산에서 오류가 발생합니다. 이 연산 통상 될 것이라고 생각하는데요.
// 이런 연산이 안된다는 것은 문제가 있다고 봅니다. 보통 사용자가 저런 연산을 할 때
// 에는 두 번 증가될 것이라고 예상하지 않을까요? 이 연산 때문에 오류가 발생하면 이러한 기대는 무너집니다.
++(A++)를 인간이 봤을 때는 그럴 수도 있겠습니다.
그런데 전후위 증감 연산자를 지원하는 계산기를 한 번 만들어보시겠어요?
다음을 읽어내면 성공입니다.
int num1 = 10, num2 = 20;
int num3 = num1 + num2;
int num4 = num3++;
이 계산기를 만드신다면 ++(A++) 문장의 애매함을 이해하실 수 있지 않을까 생각해봅니다.

#include <iostream>
using namespace std;
 
int main() {
	int A=0;
	++(A++);//여기서 오류가 발생
	cout<<A<<endl;
	return 0;
}

// 보통 전위 연산이
// const int operator ++(int dummy)
// 식이라고 했을 때(보통 저런 꼴이라 하더군요) 두 번째의 전위연산에서 그 상수로 반환된 값을 변경하려 하기 때문에
// 오류가 발생하는것은 당연하지만, 그래도 사용자의 입장에서는 저런 연산이 직관적으로 가능할 것이라고 기대하지 않을까요.
// 저런연산 안 되는 것이 C++표준에 따른 것인지 궁금합니다.
제 답변은 "후위 증가 연산자를 중복적으로 사용했을 때 발생하는 애매함"이었고 이에 대해서는 답변하지 않았네요.
위 답변자님 말씀대로라면 표준입니다.

[답글 1]
// 지역을 반환하는 것이죠. 지역을 만들어서 반환해야 하는 것입니다. 후위 연산자라는 것은요.
// 그런 한심한 수준의 질문을 올리시는군요. 예시 틀리게 올렸군요. 어떻게 후위연산자의 내부 정의를 모르십니까.
// 난 알고 질문드린 것인데. 한심합니다. 어떤 기본서에서도 "후위연산자 겹쳐서 쓰지 말아라."라는 내용을 본 적이 없습니다.
// 전문가라는 집단이라는 것이 참 배려심도 없군요. 저런 사항에 대해 아무런 설명도 없이.
// 님께 역으로 질문드리겠습니다. 언급하신 연산자의 어디를 고쳐야 할까요? 난 이미 알고 있는데.
오해하시는데, 저 답변은 질문자 분이 정확하게 후위 연산자를 구현하는 방법을 알고 있다고 가정하고 단 것입니다.

[답글 2]
// 저 예문이 맞다고 생각하십니까? 저 예문에서 후위연산자는 새 객체를 반환해야 합니다.
일반적으로는 그렇게 구현합니다.
// 전 새 객체를 반환하지 않고 후위연산자를 구현할 수 없는지에 대해서 질문을 드린 거고요.
언제요?
// 아마 저 분 알고 계실겁니다. 질문 내용을 봐서는 분명 알고 반문을 한 겁니다. 저것은 틀린 예문인 것을요.
다시 말씀드리지만 그렇습니다.

// 그리고 님이 무슨 말씀 하시는지 알겠습니다.
// 전역에서 객체를 선언하면 전역이고, 지역에서 객체를 선언하면 지역이 되는데, 무슨 지역을 언급하느냐는 말씀이시죠?
틀렸습니다. 그냥 지역과 지역 객체는 다르다는 내용입니다.

// 지역변수가 아니라 새 객체라고 하는 편이 낫겠군요. 새로운 객체를 선언해서 반환해야 합니다.
뭐 클래스의 인스턴스니 변수보단 객체가 맞는 말이긴 한데, 꼬투리 잡는 것 같긴 하지만 지역에 선언한 객체는 지역 객체라고 부릅니다.

// 아마 이리 세게 나오시는 것을 보면 후위연산자에서 선언된 객체를 반환하지 않고 후위연산자를 구현할 수 있는 방법은 없다라는 뜻으로 들리네요. 그렇죠?
어떤 것을 구현하시려는지를 명확하게 말씀해주세요. 예를 들어 이렇게 만들어도 후위 연산자를 구현한 겁니다.

#include <iostream>
using namespace std;
 
class Integer {
 int value;
public:
 Integer(int value=0): value(value) {}
 int getValue() const { return value; }
 void setValue(int value) { this->value = value; }
 Integer& operator ++() { ++value; return *this; }
 Integer operator ++(int) {
  // value를 100으로 설정해버리는 함수라도
  // operator ++를 구현하긴 한 것이니
  // 후위 연산자를 구현한 것입니다.
  Integer i = *this;
  value = 100;
  return i;
 }
};
int print(const Integer& i) {
 return printf("%d\n", i.getValue());
}
 
int main() {
 Integer i = 0;
 print((i++)++);
 return 0;
}

제 답변은 이 정도로 마치겠습니다. 전 tunecolor님을 무시하지 않습니다.
그저 참고용으로 단 답변인데 한심하다느니 소릴 들으니 기분이 언짢네요.

저는 이렇게 생각했습니다.

익명 사용자의 이미지

따라서 "이렇게 애매한 것이니 아예 문법적으로 막아버리자!"

흠... 객체에 대해서는 문법적으로 막지 않았습니다.
단지 말씀하신 대로 그 동작이 무의미할 뿐입니다.
후위++의 피연산자가 int인 경우와 객체인 경우는 많이 틀립니다.

tunecolor같은 작자에게 굳이 설명해주는 것이 아까워서 가만히 있었는데
님을 봐서라도 말씀을 드리는게 좋을 것 같군요.

후위++ 의 리턴값이 레퍼런스가 아니고 const도 아닌 클래스 타입이면,
그 결과값이 담기는 임시객체(가 포함된 수식)는
rvalue이긴 한데 const는 아니고, 따라서 명시적으로 리턴값이 const라고 지정하지 않았다면
member function을 호출하여 그 자신을 변경하는 것은 문법적으로는 틀린 수식이 아닙니다.
스택 오버플로우의 예제를 옮기자면

std::string foo();
const std::string bar();
//위와 같은 함수들이 있을때
 
foo().append(" was created by foo")   // okay, modifying a non-const temporary
bar().append(" was created by bar")   // error, modifying a const temporary

따라서 (A++)의 결과값이 const &가 아닌 class type이라면 이는 임시객체에 담기게 되며,
여기에 대해 operator++라는 맴버 함수를 호출하는 것은
문법적으로는 문제가 없습니다.
더불어 const가 아니기 때문에 이 맴버함수가 그 자신을 고치더라도 오류가 아닙니다.

요악하자면 임시 객체는 반드시 const가 아니며 이에 대해 맴버 함수를 호출하여 그 자신을 변경하는 것은 문법적으로 오류가 아니고,
따라서 ++(A++)는 A가 class type일때는 반드시 틀린 수식이 되지는 않습니다. (이는 (A++)의 결과값이 어떤 것이냐에 달려 있습니다)
그러나 말씀하신 것처럼 A가 두번 증가하는 것은 아니며
이 경우 전위 증가 연산자는 (A++)의 결과값(즉 이 경우에는 임시 객체)에 대해 동작합니다.

HDNua의 이미지

생각해보니 문법적으로 막혀있다면 (i++)++ 문장 자체가 컴파일되면 안 되는군요.
객체의 경우는 operator ++(int) 함수가 두 번 호출되는 경우라서
그냥 i.operator++(0).operator++(0)과 같이 호출된 것으로 봐야겠네요.
(operator++(int)를 호출하는 것을 표현하기 위해 operator++(0)처럼 썼습니다)

덕분에 생각을 다듬을 수 있었습니다. 다시 한 번 좋은 답변 감사합니다.

저는 이렇게 생각했습니다.

dltkddyd의 이미지

익명이 올린 자극적인 글 때문에 제가 흥분했나 봅니다. 그리고 후위연산자를 어떻게 구현하든 그것은 본인 마음이겠지만 연산자의 기본적인 의미는 변해서는 안됩니다.

제가 질문드린 것은 단지

(A++)++

이 안 된다는 것을 질문드린 겁니다. 뭐 저런 상황은 그냥 안 된다로 편하게 받아들여야 겠다는 것으로 정리가 됩니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

ifree의 이미지

계속 혼나면서도 꾸준히 질문을 올리시네요.
이것 저것 (터무니 없더라도) 의문을 가지고, 이를 해결하면서 알아가는 것은 바람직한 과정이라고 생각됩니다,
다만, 먼저 충분한 연구를 선행하는 것이 본인을 위해서도 좋을 것 같네요.

dltkddyd의 이미지

완전히 모르고 질문하는 경우, 알고 질문하는 경우, 의심이 불확실하기 때문에 질문하는 경우가 있죠? 이런 식의 답변들은 저 사람 완전히 모르고 질문한다라고 님들이 섣불리 넘겨짚었기 때문에 범하는 결례가 아닌가 하는데.
여하튼 감사하게 받아먹겠습니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

그러니까 댁이 질문하는건 이미 잘 알고 있는 내용을 의심이 불확실하기 때문에 질문을 했다는 건데... 다 알고 있는데 그냥 확인차 질문한거고, 그걸 잘 알지도 못하는 것들이 섣불리 넘겨짚어 답변한다는 그런 얘기인가요?

어쩐지 뻔한 얘기인데도 전혀 못알아 먹더라니 다 이유가 있었던거 같네요.

dltkddyd의 이미지

닉이 없으신가 보군요. 닉부터 만들고 답변 주시길. 신뢰감이 없어보입니다. 그리고 제가 알고 질문드린다는 것은 후위연산자의 선언과 정의가 어떻게 돼있는지 알고 있다는 것을 말씀드린 것이고, 제가 질문드린 것은 컴파일러 제작자들이 빌트인 타입에서 후위연산자를 연속으로 사용할 수 있게 정의할 수는 없었을까라는 차원에서 올린 것입니다. 그런 방법은 없겠군요.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

dltkddyd의 이미지

자꾸 이상한 식으로 몰고 가네. 어디다 대고 댁질인지. 반말이나 하난 님하고는 별로 말하고 싶지 않네. 혼자 벽에 대고 이야기 하쇼.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

'댁'은 낮추는 말이 아닙니다. 사전 뜻 찾아보고 오세요.

나 말고도 로그인 유저 포함해서 여러 사람이 지적을 하는데, 대체 왜라고 생각해요? 지적하는 사람들이 이상해서?

dltkddyd의 이미지

이 사람은 믿음이 전혀 안 가네. 다른 분들을 괜찮은데.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

simminjo의 이미지

댓글의 화법이 별로 좋지 못하네요....
많은 선후배님들이 서로 오는 게시판인데....좀 거시기 합니다.

---------------------------------------------------------------
Opensource에 기여하는 것이 꿈입니다.
내가 만든 코드를 모두가 사용할 때 까지~

mirheekl의 이미지

본인 생각으론 3번이지만 남이 보기엔 1번일 수도 있는 것. 물론 그 반대일수도 있고요.

일면식도 없는 타인의 스킬 수준을 정확하게 예측하는 것이 과연 가능할까요? 아니 가능하다 한들 그럴 의무가 있나요? 돈 받고 답변해주는 분들도 아닌데..

그런 과정에서 오류가 있었다고 결례로 치부하는 것은 그냥 답변을 하지 말라는 얘기나 다름없습니다. 개인적으로 재미있게 보고 있는 질문들이었는데.. 살짝 아쉬운 생각이 듭니다.

제 생각엔 계속 여기에 질문을 올리시는 것보다는, 표준 문서들을 가지고 직접 연구해보시는게 좀 더 나을 것 같습니다. 정답을 찾는 과정에서 얻으시는 것이 많을 듯.

--

dltkddyd의 이미지

익명으로 올리는 글인 경우 내용도 없으면 신뢰할 수 있을까요? 처음부터 인신공격성의 발언이나 하니 드리는 말씀입니다. 저 익명의 사용자가요. 또한 답변 주신 모든 분들에 대해 언급한 것도 아닐 뿐더러 제가 결례라고 한 것은 스킬 수준에 대한 언급이 아니었습니다. 여기 대다수 분들 실력이 좋은신 것 같은데. 인신공격성 발언에 살짝 기분이 언잖았습니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

님이 kaeri님한테 단 댓글 찾아보고 오세요. 님이야말로 익명이죠.

누가 애써 시간과 노력 들어서 답글 달아주면 복습하게 해줘서 고맙다느니, 현실에서도 그래요?

세벌의 이미지

답변하는 분이 결례를 했나요? 질문하신 분이 먼저 결례를 한 건 아닌지?

dltkddyd의 이미지

(A++)++ 연산이 만약 된다면 되는 것을 사용하겠습니까? 아니면 안 되는 것을 그대로 사용하시겠습니까? 물론 지역 객체가 걸림돌이긴 하겠지만요.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

세벌의 이미지

아 다르고 어 다르다 라는 속담을 아시는지요? 그런 질문을 하면 안 된다는 게 아니라, 질문하는 방법이 다른 사람들의 악플을 불러올 가능성이 있다는 얘기임.

dltkddyd의 이미지

https://kldp.org/node/142984#comment-604310

이 글을 올린 익명입니다. 누가 그렇게 되야만 한다고 기대하고 질문을 올립니까? 저게 안 되니 되는 방법을 물어본 것 뿐인데. 저런 식으로 남의 말을 호도하는 것이 잘못된 것이죠. 그런데 그 때부터 계속 이상한 댓글들을 저 익명이 달기 시작하더군요. 저런 식으로 남의 입장을 곤란하게 해도 되는 것일까요?

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

너의 처음 질문은 이거였고

그래도 사용자의 입장에서는 저런 연산이 직관적으로 가능할 것이라고 기대하지 않을까요. 저런연산 안 되는 것이 C++표준에 따른 것인지 궁금합니다.

되는지 안되는지 방법을 물어본게 아니었죠.
왜 직관으로는 되는데 실제로 안되느냐 뭐 그런 질문이었지.

다른 글에서도 마찬가지지만, 이 글에서도
중간에 다른 사람이 알려준 내용을 가지고
그걸 마치 처음부터 알았던 것처럼 말이 계속 바뀌죠.
질문 내용도 계속 바뀌고.

하나 답해주면 그게 아니라면서 말 바꿔서 다른거 들이대고
그거 또 답해주면 같은 방식으로 또 뺑뺑이 돌죠.

네가 어떤 인간인지 알고 난 다음부터는 말을 섞는 것 자체를 피하려고 하는데,
이건 확실하게 밝혀둬야 또다른 피해자가 안생길것 같네요.

그리고 한마디 더하자면
네가 모르는 내용 가지고 답변달지마.

세벌의 이미지

날카로운 지적이긴 한데... 로그인 안 하고 쓰셨군요. kldp 자주 들러본 경험에 의하면, 이 동네는 익명으로 쓴 글에는 익명이라는 이유만으로 태클 거는 분도 많으니 참고하셔요. :)

dltkddyd의 이미지

여러모로 감사합니다. 잘못 쓰거나 알고 있던 개념들이 종종 바로 잡히는군요.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

dltkddyd의 이미지

계층구조부터 상속, 가상함수에 대해 차근 차근 다시 살펴보고 있습니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

답이 없는 친구군요......

질문 수준을 봐도 그러하고.......

dltkddyd의 이미지

계속 익명으로 올린 쓸데없는 글을 읽는데 시간 낭비하고 싶지 않습니다. 댁 수준부터 살펴보고 오세요.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

익명 사용자의 이미지

열등감 쩖.
기술 커뮤니티 와서 오냐 오냐 맞네 맞네 해 줄 사람 찾는 거부터가 에러.

DarkSide의 이미지

고딩이라 하지 않았나요?
이런 글 쓸 시간이 없을텐데...

dltkddyd의 이미지

그런 말 한 적이 없습니다. 그리고 고딩이 아니라 일반인입니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.