草庐IT

const-reference

全部标签

c++ - 使用 malloc() 为 const char 字符串动态分配内存

我正在编写一个程序,它从.ini文件中读取一个值,然后将该值传递给一个接受PCSTR(即constchar*)的函数。函数是getaddrinfo()。所以,我想写PCSTRReadFromIni()。要返回常量字符串,我计划使用malloc()分配内存并将内存转换为常量字符串。我将能够获得从.ini文件中读取的确切字符数。这种技术可以吗?我真的不知道还能做什么。以下示例在VisualStudio2013中运行良好,并根据需要打印出“hello”。constchar*m(){char*c=(char*)malloc(6*sizeof(char));c="hello";return(co

c++ - 在头文件中使用 const

在文件.h中:externconstintONE;在文件.cpp中#include"file.h"constintONE=1;在main.cpp中#include#include"file.h"intmain(){std::cout问题:为什么我必须在file.cpp中使用#include"file.h"?有ONE的定义。谢谢 最佳答案 默认情况下,声明为const的变量具有内部链接,就好像它们也被声明为static一样。如果包含header,则extern声明将为它提供外部链接,一切都会好起来的。否则,该定义无法从其他翻译单位获得

c++ - 传递与 const 和非常量引用相同的对象

以下代码使用g++v4.8.1编译并输出45,但它的编译是否保证基于标准?其他编译器会提示吗?#include#includevoidtest(conststd::vector&a,std::vector&b){b[0]=45;}intmain(){std::vectorv(1,0);test(v,v);std::cout我知道函数定义本身并没有错,但是当用同一个对象v调用test时,我有点期待我传递一个警告作为const和非const引用的单个对象。 最佳答案 没有问题,因为编译器将这两个参数视为不同的引用。要理解代码,请考虑以下

c++ - 在哪些情况下 (const) 引用返回值是不安全的?

我倾向于经常使用以下符号:constDatum&d=a.calc();//continuetoused当calc的结果在堆栈上时,这有效,参见http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/.尽管编译器可能会在此处进行优化,但显式避免临时对象感觉很好。今天我意识到,d的内容在数据写入a的成员后变得无效。在这种特殊情况下,get函数只是返回对另一个成员的引用,然而这与write完全无关。像这样:constDatum&d=a.get();//...someoperation.

c++ - 标签调度、可变参数模板、通用引用和遗漏的 const 说明符

请考虑以下示例(标签分发、可变参数模板、完美转发等,全部合而为一):#include#include#includestructA{};structB{};voiddoIt(A&&,conststd::string&){std::coutvoiddoIt(T&&,Args&&...){std::coutvoidfn(Args&&...args){doIt(T{},std::forward(args)...);}intmain(){conststd::stringfoo="foo";std::stringbar="bar";fn(foo);fn(bar);fn(foo);}在这种情况下,

c++ - 无法将 const 应用于 typedef 引用

以下代码在将const应用于value_type&的返回值引用时有效,但如果我使用相同类型的typedef,则会出错。举个例子:classT{};classA{public:typedefTvalue_type;typedefvalue_type&reference;//Notworkingconstreferenceoperator*()const;//Butthisworks?//constvalue_type&operator*()const;};//Error!consttypenameA::referenceA::operator*()const{}intmain(){ret

c++ - 使临时变量的 const 引用成员安全吗?

我曾多次尝试这样编写代码:structFoo{doubleconst&f;Foo(doubleconst&fx):f(fx){printf("%f%f\n",fx,this->f);//125125}doubleGetF()const{returnf;}};intmain(){Foop(123.0+2.0);printf("%f\n",p.GetF());//0return0;}但它根本不会崩溃。我还使用valgrind来测试程序,但没有出现错误或警告。因此,我假设编译器自动生成了一段代码,将引用指向另一个隐藏变量。但我真的不确定。 最佳答案

c++ - 由于对具有 std::string 的方法的 undefined reference ,链接 webrtc-native 时出错

我正在尝试构建webrtc版本62,使用以下内容1.gitcheckout-bbranch62refs/remotes/branch-heads/622.gngenout_release_62/x64/Debug--args="rtc_include_tests=falsertc_use_h264=falseuse_rtti=trueis_component_build=falseenable_iterator_debugging=falseenable_nacl=falsetarget_os=\"linux\"target_cpu=\"x64\"is_debug=true"3.nin

c++ - VS 2017 不会隐式地将 const char* 转换为 char*

这个问题在这里已经有了答案:Conversionfromstringliteraltochar*isdeprecated[duplicate](2个答案)关闭4年前。我最近安装了VS2017,遇到了一个奇怪的问题。基本上,如果不明确地将它们转换为(char*),我就不能使用硬编码字符串。如果我说类似Function("test")的话,它只会抛出一个错误,指出constchar*与char*不兼容。我真的不想坚持使用VS2015:(。有人知道如何让VS认识到它们是同一回事吗?非常感谢。

c++ - 是否有任何 C++ 编译器可以对悬空引用发出警告?

给定以下代码,其中x是对已消失对象的悬空const引用,因此是未定义的行为。autoget_vec(){returnstd::vector{1,2,3,4,5};}constauto&x=get_vec().back();似乎GCC7.3、Clang6.0和MSVC都无法发出警告,即使启用了所有警告。有谁知道在这些情况下是否可以发出警告?在这些情况下,constauto&和auto&&之间有什么区别吗?请注意,如果back()将按值返回,则它不会是未定义行为,因为生命周期临时对象x已扩展为函数scoop。长话短说:我有一个代码库,其中constauto&被用作初始化变量的默认方式,出于