那些cpp细节

1.char*类型的隐式转化成bool类型
void a(bool input)
{
cout<<"I amd first"<<endl;
cout<<input<<endl;
}
void a(const string &input)
{
cout<<"I amd second"<<endl;
cout<<input<<endl;
}
int main(int argc,char **argv)
{
a("str"); // 是调用第二个a函数吗?
a(string("str"));
return 0;
}
char*类型的"str"居然被隐式转化成了bool类型

2. #pragma pack(1) 成对使用:
先来介绍一下背景,我这里有个server,会在运行时调用一个so,正常情况下都一切正常,但是在引用了一个第三方给的头文件之后,在调用so的一个函数的时候就会core掉。百思不得其解之下,去看了一下那个第三方头文件的定义:
#ifndef HEADER_OPENAPILOG_PROTOCOL
#define HEADER_OPENAPILOG_PROTOCOL
#pragma pack(1)
//一些结构体定义
#endif
只调用了#pragma pack(1)却没有在文件结束时调用#pragma pack()!而我的主调server虽然重新编译了,但是so却没有重新编译,导致其共用的结构体一个做了字节对齐,一个没有做。

时间: 2024-10-12 21:47:44

那些cpp细节的相关文章

[转载] C语言细节,写的非常棒!

这篇文章主要讨论C语言细节问题.在找一份工作的时候,语言细节占的比例非常小,之前看某个贴着讨论,估计语言细节在面试中,占了10%的比重都不到,那为什么还要研究C语言的细节呢,我觉得有三个原因促使我总结这篇文章: 1. 总会有些面试官喜欢问这样的问题,尤其是偏底层开发的面试官. 2. 总有有那么两个2B同学.同事,搞两个很偏的知识点来考你,把你难倒以后,他就乐呵呵的满足了. 3. 对C语言有更加巩固的基础,增加信心,在代码出错时,可以非常肯定哪里没有错,而把精力花在真正的问题上. 1) switc

quick 2.23 它们的定义c++代码lua与总结的一些细节

它们的定义c++代码lua与总结的一些细节 参考:点击打开链接 1.自己定义 XXX.cpp .XXX.h 2.D:\quick\quick-cocos2d-x-2.2.3-rc\lib\cocos2d-x\external\extra\luabinding 创建 XXX_luabinding.tolua $#include "XXX.h" class XXX { static int getFileData();//依据自己详细写的去编写 }; 创建 build_XXX_luabin

【C/C++学院】(5)面向对象编程练习--h和cpp分开编写

抽象一个点,一个圆,并判断点与圆的关系.(在圆内还是圆外) h文件进行类的声明: cpp文件为类的实现细节:主要注重的细节为: ================================================================================================================================= 工程代码如下: //MyCircle.h #pragma once #include"MyPoint.h&quo

传统D3D11程序面向VS2015编译环境的配置修正细节

A.  配置细节 使用#include <unordered_map>替代<hash_map> 这个是c++标准建议的,没啥好说的 使用#include <directxmath.h>替代<xnamath.h> 注意:如不想修改原xnamath代码,则需在包含directxmath.h之前定义_XM_NO_INTRINSICS_宏标志,以与原xnamath代码兼容 然而,_XM_NO_INTRINSICS_标志将指示directxmath不使用SSE/SSE

C++那些细节--typedef关键字

一.简介 关于typedef关键字,以前刚刚学C语言的时候,用它来重定义结构体别名.之后的话就是在用函数指针的时候用过一些,然而并不知道这个还有什么用处.今天花点时间总结一下typedef的细节. 在计算机编程语言中用来为复杂的声明定义简单的别名,与宏定义有些差异.简单来说,就是用来给一个复杂变量定义一个好记一点的名字.另外,使用typedef可以简化一些复杂的声明. 二.typedef的用途 1.定义类型别名,而不是简单的替换 typedef的第一个功能是定义类型的别名,比如Int*,比较麻烦

项目总结之截屏细节考虑

DionysosLai([email protected]) 2014/12/22 2014项目总算告一段落,这个产品顺顺利利从开始到最后的上市,圆满成功.借着项目总结,回顾自己做的几个游戏,将一些细节问题归纳.第一篇,就以目前正在做的的新游戏<圣诞节>开篇,讲讲游戏截屏问题. 对于截屏,本身技术,并不是很复杂,一般有两种方法,一种是使用Opengl像素取点方式:另一种是使用RenderTexture纹理方法,详细内容,可以参考,之前写的一篇文章:http://blog.csdn.net/di

STLport-5.2.1 STL port配置; cl.exe 编译cpp:ms和cygwin两种模式;cygwin环境配置和使用、GCC编译入门

1.在ms中要使用windows sdk和相关的lib设置实在太麻烦啦,以及dll等文件缺失是在严重.所以我简单地利用了vs安装目录下的批处理文件,在命令窗口中进入: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC ,直接运行vcvarsall.bat加载vs中以及配置好的环境,就可以使用命令行: cl -GX hello.cpp去实现编译并运行.2012版本的vs中-GX换成-EHsc.同理我也可以使用vs2013.目前vs2013

Microsoft Edge 浏览器远程代码执行漏洞POC及细节(CVE-2017-8641)

2017年8月8日,CVE官网公布了CVE-2017-8641,在其网上的描述为: 意思是说,黑客可以通过在网页中嵌入恶意构造的javascript代码,使得微软的浏览器(如Edege),在打开这个网页时,造成堆溢出.通过精心构造javascript代码,可以通过浏览器在用户电脑上执行任意代码.受影响的版本包括下列操作系统中的浏览器(IE(9,10,11)和Edge): 1. Windows 7 SP1 2. Windows Server 2008 R2 SP1 3. Windows 8.1 4

CPP 学习笔记随笔

CPP对象模型 何为C++对象模型? C++对象模型可以概括为以下2部分: 语言中直接支持面向对象程序设计的部分 对于各种支持的底层实现机制 语言中直接支持面向对象程序设计的部分,如构造函数.析构函数.虚函数.继承(单继承.多继承.虚继承).多态等等,这也是组里其他同学之前分享过的内容.第一部分这里我简单过一下,重点在底层实现机制. 在c语言中,"数据"和"处理数据的操作(函数)"是分开来声明的,也就是说,语言本身并没有支持"数据和函数"之间的关