草庐IT

add_const

全部标签

c++ - 使用标量类型的 "const"的好处? (例如 "const double"或 "const int")

///////////////////////////////////////classA{...constdoublefunA(void){...}};Aa;doublex=a.funA();//althoughtheintentionisto//enforcethereturnvaluetobeconstandcannotbe//modified,ithaslittleeffectintherealworld.classA2{...doublefunB(void){...}};///////////////////////////////////////classA{voidset

c++ - 为什么引用成员可以被const成员函数修改?

以下将compile即使const成员函数会修改成员的值。怎么会这样?#includestructfoo{std::string&str;foo(std::string&other):str(other){}voidoperator()(std::string&some)const{str+=some;}};intmain(){std::stringext("Hello");fooa{ext};std::stringmore("world!");a(more);cout 最佳答案 将引用视为经典指针:#includestructfo

c++ - "const LPVOID"等于 "void * const"吗?

如果是这样,为什么一些Win32header使用它?例如:BOOLAPIENTRYVerQueryValueA(constLPVOIDpBlock,LPSTRlpSubBlock,LPVOID*lplpBuffer,PUINTpuLen);更详细一点:如果API从不使用引用(或任何其他仅C++构造)而仅使用指针和值,那么使用constLPVOID与LPCVOID有什么意义。我是否应该将每个看到constLPVOID的地方都视为真正意义是LPCVOID的地方?(因此添加类型转换是安全的)进一步澄清:在这种情况下,constLPVOIDpBlock似乎确实是一个错误。Windows2008

c++ - 使用 g++ 使用 NULL const char* 避免不正确的 std::string 初始化

是否有任何g++选项可以检测到带有NULLconstchar*的std::string的不正确初始化?我正在将一些int字段转换为std::string字段,即:structFoo{intid;Foo():id(0){}};...变成了:structFoo{std::stringid;Foo():id(0){}//oooops!};我完全忽略了使用0进行的错误“id”初始化,而g++根本没有给我任何警告。这个错误是在运行时检测到的(std::string构造函数抛出异常),但我真的很想在编译时检测到这些东西。有什么办法吗? 最佳答案

c++ - 通过构造时获取的指针修改const对象

我刚刚发现在没有任何const_cast的情况下修改const对象是多么容易黑魔法。考虑:#includeclassTest{public:Test(intv):m_val{v},m_ptr{&m_val}{}intget()const{returnm_val;}voidset(intv)const{*m_ptr=v;}private:intm_val;int*m_ptr;};intmain(){constTestt{10};std::cout最新版本的Clang、GCC和MSVC不显示任何警告并产生预期的输出:100根据当前标准,这是明确定义的行为吗?如果未定义m_val会怎样类型为

C++11 类型推导与 const char *

在GotW94,HerbSutter对“经典C++”声明进行了区分constchar*s="Hello";和“现代”风格autos="Hello";他告诉我们“s的类型有细微差别,auto样式更正确”。[编辑添加:评论表明这可能不公平地表达Sutter的实际意思;请参阅下面的讨论。]但是……有什么区别?我的印象是constchar*是引用字符串文字的正确方法。此外,当我询问我的调试器(lldb)时,它似乎认为类型实际上是相同的:*thread#1:tid=0x1756c2,0x0000000100000f8ftest`main+31attest.cc:4,queue='com.appl

c++ - 如何将字符串文字传递给采用 const std::wstring& 的函数

我有一个采用conststd::wstring&font_family的函数,即FontFont::CreateFont(conststd::wstring&font_family){...}问题是我如何通过传递字符串文字(例如等宽)来调用该函数?我试过了CreateFont("monospace");CreateFont("std::wstring("monospace"));两者都不编译。谁有更好的主意?谢谢。 最佳答案 尝试:CreateFont(L"monospace");前导“L”指示编译器生成宽(wchar_t)字符串。

c++ - 使用 Arduino 将字符串转换为类型 const char*

我正在使用Arduino库。我想记录一些来自传感器的数据,为其添加日期时间戳并将其写入SD卡。建立文本文件名我试过StringdataFileName=String(String(sedClock.getTime().year(),DEC)+String(sedClock.getTime().month(),DEC)+String(sedClock.getTime().day(),DEC)+String(sedClock.getTime().hour(),DEC)+String(sedClock.getTime().minute(),DEC)+String(sedClock.getTi

c++ - const_cast<const Type*> 有用吗?

最近我发现一段C++代码可以有效地执行以下操作:char*pointer=...;constchar*constPointer=const_cast(pointer);显然作者认为const_cast表示“添加常量”,但实际上const也可以隐式添加:constchar*constPointer=pointer;在任何情况下我真的必须const_cast到一个指向常量的指针(const_cast,如上例)? 最佳答案 你有2个重载并且你想强制执行const一个。当您根据另一个来调用一个时,通常就是这种情况。classA{public

c++ - 返回 const 引用或引用的方法会导致内存泄漏吗?

我非常好奇从方法返回引用是否会导致内存泄漏。以下是示例情况。classexample{public:vector&get_vect(){returnvect;}int&get_num(){returnnum;}private:vectorvect;intnum;};voidtest_run(example&input){int&test_val=input.get_num();vector&test_vect=input.get_vect();}intmain(){exampleone;test_run(one);return0;}我的问题是test_val和test_vect在tes