草庐IT

c++ - C++ 字符串文字的类型

出于好奇,我想知道C++字符串文字的真正底层类型是什么。根据我的观察,我会得到不同的结果。像下面这样的typeid测试:std::cout显示charconst[5]。像这样尝试将字符串文字分配给不兼容的类型(以查看给定的错误):wchar_t*s="hello";我从VS12的IntelliSense得到类型为“constchar*”的值不能用于初始化类型为“wchar_t*”的实体。但我不明白它怎么可能是constchar*,因为VS12接受了以下行:char*s="Hello";我读到这在C++11之前的标准中是允许的,因为它是为了与C的追溯兼容性,尽管修改s会导致未定义的行为。

c++ - 如何使 clang-format 跳过 c++ 代码的部分

有什么方法可以配置clang-format工具来跳过我的Qt::connect函数调用吗?我的构造函数中有几个连接,如下所示:connect(m_Job,SIGNAL(error(constQString&,constQString&)),this,SLOT(onError(constQString&,constQString&)));connect(m_Job,SIGNAL(message(constQString&)),this,SLOT(onMessage(constQString&)));connect(m_Job,SIGNAL(progress(int,int)),this,

c++ - Operator = 在 C++ 中使用 Const 变量重载

我想知道你们是否可以帮助我。这是我的.h:ClassDoctor{conststringname;public:Doctor();Doctor(stringname);Doctor&Doctor::operator=(constDoctor&doc);}和我的主要:intmain(){Doctord1=Doctor("peter");Doctord2=Doctor();d2=d1;}我想执行operator=函数。谁能帮我?注意Doctor上的const成员。************编辑:*********我的主要问题是我希望另一个类具有一个Doctor属性,就像Pacient有一个D

c++ - 模板实例化错误

我有如下定义的模板函数“compare”。#includeusingnamespacestd;templatevoidcompare(constT&a,constT&b){cout当我实例化与相同长度的字符串文字进行比较时,编译器不会报错。当我用不同长度的文字来做时,它说“错误:没有匹配的函数来调用比较(constchar[3],constchar[5])”我很困惑,因为比较函数应该用字符指针而不是实例化字符数组。字符串文字不应该总是衰减为指针吗? 最佳答案 如果您将声明更改为:,您的示例将编译:voidcompare(constT

c++ - 为什么/如何编译?

MSVisualStudio2008中的C++。警告级别4加上大量额外警告也已启用。我希望这会发出警告至少,但更有可能是编译器错误?函数声明如下:intprintfLikeFunction(constintbufferLength,char*constbuffer,constchar*constformat,...);代码使用-有一个拼写错误:虽然传入了outputBuffer的ARRAY_SIZE,但outputBuffer本身不是-这肯定不应该编译:printfLikeFunction(ARRAY_SIZE(outputBuffer),"Format:%s,%s",arg1,arg

c++ - 使用 const char[] 或 const std::string 哪一个?

哪个对字符串文字更好,标准字符串还是字符数组?我的意思是说常量字符串,比如说constcharname[]="so";//ortouseconststringname="so"; 最佳答案 对于字符串文字,并且仅对于来自文字的字符串常量,我会使用constchar[]。std::string的主要优点是它有免费的内存管理,但这不是字符串文字的问题。它是文字的实际类型,它可以直接用于任何需要旧C样式空终止字符串或C++字符串(隐式转换开始)的API。您还可以通过使用数组而不是指针来获得编译时大小的实现。现在,在定义函数接口(inter

c++ - `shared_ptr` 破坏了对象的常量性

考虑以下代码:classB{intx;public:B():x(10){}intget_x()const{returnx;}voidset_x(intvalue){x=value;}};classA{boost::shared_ptrb_;public:boost::shared_ptrget_b()const{returnb_;}//(1)};voidf(constA&a){boost::shared_ptrb=a.get_b();intx=b->get_x();b->set_x(++x);//(2)}intmain(){Aa;f(a);return0;}在这段代码(2)中,get_

C++ 标准 : default "const T& value" in vector constructor for type 'int'

explicitvector(size_typen,constT&value=T(),constAllocator&=Allocator());vectorvec(10);cout::const_iteratoriter=vec.begin();iter!=vec.end();++iter){coutVS2010的输出:vec.size:100000000000问题>:根据最新的C++标准,当我们使用vectorObject(size_type)定义一个vector对象时,默认的int值是多少?在这里你可以看到,VS2010输出0作为默认的int值。但我不知道这是否是C++标准所要求的

c++ - 在 C++ 中适当使用全局 const 变量?

我正在为我的CS类(class)编写程序。它模拟了一家express公司在机场的事件。这是一个非常简单的小程序,由一些头文件和源文件以及一个编排模拟的main.cpp源文件组成。有一些给定的常数值,比如cargo到达的频率、飞机的载重量、worker处理某些元素所花费的时间等(都是整数值)。我有必要在main.cpp中的几个函数中访问这些变量将main()函数上方的这些声明为constint似乎是合理的,有效地使它们成为全局的,例如constintkTotalTime=2000;constintkPlaneCapacity=25;intmain(){//...程序代码我知道在大多数情况

c++ - 为什么 `e.what()` 打印 "bad allocation"?

tryblock中的new表达式在我的计算机中引发了bad_alloc异常。请注意,catch子句按值而不是按引用接收异常对象。为什么e.what()会打印出"badallocation"?我以为它会被切成薄片。#includeintmain(){try{int*p=newint[0x1F000000];}catch(std::exceptione){std::cout 最佳答案 VisualStudio(Dinkumware?)使用std::exception的实现,其中包含消息的内部存储†。(完成一个接受字符串的非标准构造函数。