摘要: 虽然auto_ptr已经过时了, 但是对这种古董做考古工作仍旧有很多裨益。 所有权移交(总是move),是auto_ptr的核心语义之一。当调用foo(ptr)后,会打印输出“ptr is null” 。 为了防止发生foo中的行为,可以定成: 那么auto_ptr中的拷贝构造函数是什么样子的? a 阅读全文
posted @ 2018-03-25 23:14 thomas76 阅读(164) 评论(0) 推荐(0)
摘要: 要区分 literal 和 literal-type这两个不同的概念。 literal:文字量,10,3.14, true ,u8"123", L"好"这些东西。 literal-type: 参考http://en.cppreference.com/w/cpp/concept/LiteralType 阅读全文
posted @ 2018-03-25 19:09 thomas76 阅读(4540) 评论(0) 推荐(0)
摘要: C++11的std::bind是个巨大的进步,把各种稀奇古怪的函数对象统一起来。古老的bind1st终于退出历史舞台。但是bind仍旧存在漏洞。例如: 调用std::bind函数时,需要对add(1,2)这个子表达式求值,如果想“延迟”求值,只能这么做: 第18行嵌套一个bind就把人搞晕。嵌套的b 阅读全文
posted @ 2018-03-24 23:43 thomas76 阅读(367) 评论(0) 推荐(0)
摘要: 考虑如下代码: 首先演示了如何把自定义的互斥量spinlock_mutex,放到unique_lock等RAII对象管理。 然后演示了spinlock遇到线程上下文切换,foo函数里,sleep模拟了上下文切换。对于bar线程来说,这是灾难性的,因为直到foo执行完sleep之后,才有可能释放锁。 阅读全文
posted @ 2018-03-22 14:28 thomas76 阅读(1978) 评论(0) 推荐(0)
摘要: 考虑如下代码: 行3~6 定义了一个lambda表达式。(注意它的排版,非常类似一个函数定义。) C++17 开始支持了常量表达式中,使用lambda。(这在C++11中是不允许的)。从此lamda表达式可以进入常量表达式领域了。 这里展示一个最简单的: 定义一个匿名lambda,接收一个int为参 阅读全文
posted @ 2018-03-22 09:50 thomas76 阅读(320) 评论(0) 推荐(0)
摘要: Callable对象,是任何可以调用的东西。函数指针,函数,重载了operator()的对象,lamda 在模板编程实践中,经常做调用转发,例如: 但是,F(args...)只能应付普通函数,和重载operator()的对象。如果F是函数指针,就挂了。std::invoke就是一个utility类, 阅读全文
posted @ 2018-03-21 20:11 thomas76 阅读(1098) 评论(0) 推荐(0)
摘要: new运算符支持指定按什么对齐了。over-aligned意思是超过默认的对齐的尺寸。std::max_align_t是个类型,其对齐大小为标量当中最大的那个 经测试,MS上的值为8。其它平台的典型值为8或16。 参考:https://ask.helplib.com/others/post_1236 阅读全文
posted @ 2018-03-21 17:03 thomas76 阅读(217) 评论(0) 推荐(0)
摘要: 考虑如下代码: S(1)构造了一次,是个无名的临时对象(暂且给它取名为tmp),然后传递给fun函数,s是另一个局部对象。因此程序应打印两次~S() called。(实测vs2015打印2次,gcc和clang中只打印一次) C++17开始,S(1)这个纯右值不一定要物化为tmp,意思是在这个程序中 阅读全文
posted @ 2018-03-21 14:23 thomas76 阅读(462) 评论(0) 推荐(0)
摘要: 参考:http://zh.cppreference.com/w/cpp/language/expressions 不求值表达式:表达式在编译期被使用,运行期无计算。例如: 但是,typeid有个例:令 typeid(expr), 当expr是广义左值(glvalue)时,expr是对应的运行期计算的 阅读全文
posted @ 2018-03-21 11:40 thomas76 阅读(125) 评论(0) 推荐(0)
摘要: 考虑一个问题,如何获得utf8的字符串? 在windows环境下的vs20xx中,"你好"存储在gbk_str中的编码格式是GB2312。所以需要一个转换操作,才能得到utf8字符串。 C++17到来后,出现了u8 这里注意的一个问题是:数据,和处理数据的程序的一致性。 把字符串送到控制台显示,想要 阅读全文
posted @ 2018-03-20 16:16 thomas76 阅读(2199) 评论(0) 推荐(0)