목록개발 및 공부 (189)
NeuroWhAI의 잡블로그
포인터의 타입이 달라도 같은 인스턴스를 가리키고 있다면 주소는 다 같을 줄 알았는데 아니더라고요. #include class Mother { public: virtual void foo1() { } int a; }; class Father { public: virtual void foo2() { } int b; }; class Child : public Mother, public Father { public: int c; }; int main() { Child c; Mother* m = &c; Father* f = &c; if ((void*)&c == (void*)m) { std::cout
package com.neurowhai data class Book(val id: Int, val name: String, var info: String = "NOPE") { // 오직 기본 생성자에 선언된 프로퍼티만 데이터로 취급하므로 // 그 외의 멤버는 toString, copy, hashCode등의 // 자동으로 생성된 메소드에서 다루지 않음. val fullName get() = "$id - $name" } class Outer { class Inner { fun foo() = 42 } } class Outer2 { var value: Int = 42 inner class Inner { // inner 키워드로 수식된 내부 클래스는 // 외부 클래스의 멤버에 접근 가능 fun sum(n: Int..
http://www.hanbit.co.kr/store/books/look.php?p_code=B2165426861 오래된 책이지만 하드웨어 공부는 엄두가 안나서 안하고 있었는데 도서관에서 우연히 보고 괜찮다 싶어서 샀고 오늘 다 봤습니다 ㅎㅎ(원래 책 사면 블로그에 올리는데 복귀 당일 머리 아픈 일이 있었어서 까먹고 못올림...ㅠ) 원래 하드웨어에 관심이 없어도 C언어 같은 언어를 배우면 어느정도 알게는 되는데 역시 이렇게 제대로 보는게 좋은 것 같습니다.책 제목이 CPU라서 CPU 내용만 있나 싶기도 할 수 있지만 GPU에 대해서도 꽤 많이 알려줍니다.(GPU 구조, CUDA 등...)또 C++같은 언어 사용자라면 알아두면 좋을 vtable 내용도 있습니다.가상메모리, 파이프라인도 알아두면 아이디어를 ..
가짜 공유란 캐시 코히런스 때문에 시스템이 실제로 공유되고 있지 않은 캐시 데이터를 동기화하는 행위 또는 그로 인해 발생하는 성능 하락을 말합니다. 얼마전 책에서 읽었는데 충격적인지라 기억에 남습니다. 그냥 바로 코드를 봅시다. (주의: 하드웨어 환경에 따라 결과가 상이할 수 있음) 코드 및 결과 : https://wandbox.org/permlink/Nr8F51OgbILBiIUw #include #include #include using namespace std; using int64 = long long int; constexpr int64 NUMBERS = 1000000000LL; volatile int64 num1 = 0; volatile int64 num2 = 0; void job1() { fo..
package com.neurowhai class Human { val name: String var age: Int = 1 get() = field set(value) { if (value != 1) { println("1살인데요.") } else { field = value } } val job get() = "구닌" var truth = "뉴로와이는 천재다." private set lateinit var info: String init { name = "NeuroWhAI" } fun setup() { info = "전역을 원한다." } } fun main(args: Array) { val me = Human() println("I am ${me.name}!") me.age = 42 println("..
https://en.cppreference.com/w/cpp/language/structured_binding Structured binding은 C++17에서 추가된 문법입니다.한글로는 뭐라고 해야할지 모르겠네요. 구조적 바인딩?구조체나 배열 등이 가지는 멤버들을 풀어서 바인딩(변수에 할당)할 수 있게 해주는 편의 문법입니다. 가장 간단한 예를 들자면 int arr[3] = { 1, 2, 3 }; auto [a, b, c] = arr; cout
// 추상 클래스 abstract class ZeroBase { abstract fun hello() // Body 없음. } // 상속 가능 클래스 open class Base(val x: Int) : ZeroBase() { override fun hello() { // 오버라이드시 override 키워드 필수. println("Hello!") } // abstract class, interface의 요소가 아니라면 // 오버라이드가 가능하기 위해선 open 키워드가 필요. open fun test() { println("Base") } } class Derived : Base { // super(...)로 상위 클래스의 생성자 호출 가능. constructor() : super(42) construc..
https://en.cppreference.com/w/cpp/language/operator_comparison#Three-way_comparisonhttps://en.cppreference.com/w/cpp/language/default_comparisons 비교연산자...라네요...a b 일때a b면 0보다 크다는 것을 의미하는 객체(greater)를,a == b면 0을 의미하는 객체(equivalent)를 반환한다고 합니다.왜 0보다 작은 값이면 값이지 객체냐고 물으신다면 저도 모릅니다(?)int같은 타입이 반환형이 아니고 std::strong_ordering, std::weak_ordering 등의 클래스에 정의된 상수를 반환한다고 하..
https://en.cppreference.com/w/cpp/language/class_template_argument_deduction "The syntax of a user-defined deduction guide is the syntax of a function declaration with a trailing return type, except that it uses the name of a class template as the function name""user-defined deduction guide는 템플릿 클래스를 함수 이름으로 사용한다는 것만 빼면'->'를 사용해 반환형을 명시한 함수 선언 문법입니다." 이름을 좀 더 길지만 알기 쉽게 쓰자면User-defined template a..
https://en.cppreference.com/w/cpp/language/template_argument_deduction 템플릿 인자 추론은 익숙한 문법이지만 C++17부터 기능이 더 확장되었습니다.템플릿 클래스가 객체 생성의 타입으로 사용되는 경우에도 추론이 수행되도록 말이죠!이게 무슨 말이냐... 아래 코드를 보시면 바로 이해가 되실겁니다. #include using namespace std; template class Foo { public: Foo(const T& data) : data(data) { } T data; }; int main() { Foo a = 42; auto f = Foo{ a.data }; cout