草庐IT

const_object

全部标签

c++ - 有没有办法在 Emacs 中同时启用 Objective-C 模式和 C++ 模式?

我正在处理一些Objective-C++代码(.mm文件),我很好奇是否有可能让emacs对Objective-C部分和C++部分。objc-mode和c++-mode都是主要模式(建立在cc-mode之上),所以它们不能用于同时。是否有任何次要模式或elisphack可用于同时启用Objective-C和C++语法高亮显示? 最佳答案 我自己并没有这样做,但由于所有这些模式都基于cc模式,所以您似乎可以获得objc模式样式和c++模式的源代码并将它们组合起来。另一种可能性是尝试一种替代的objc模式,它应该更先进,也许最好将c++

c++ - 在 boost::ptr_unordered_map 中存储指向 const 对象的指针

我似乎做不到boost::ptr_unordered_map工作-底层实现看起来像是将东西转换为void*.我是否只需要硬着头皮让我的方法包装对此的访问做一个const_cast插入项目时,或者我在这里遗漏了什么?有什么方法可以存储指向const对象的指针(constFoo*)? 最佳答案 看起来这是不可能的。解决方法是包装对ptr_unordered_map的访问.插入方法应该采用constauto_ptr然后执行const_cast插入它。如果您在删除元素时将auto_type交还给客户端代码,则需要从中解压指针并将其传输到co

java - JNI : Overhead of holding Java object references within the native code?

我正在研究通过JNI将JRE集成到C++应用程序中。在C++应用程序中持有对Java对象的大量引用(JNI术语中的全局引用)的开销是多少?使用这种方法我应该注意什么问题(除了显而易见的问题,例如手动取消分配引用)吗? 最佳答案 (a)开销与从Java执行时一样。您正在阻止对象被垃圾收集。(b)在JNI调用中持有对象引用对JVM来说可能是致命的,除非你做得正确。您需要仔细阅读JNI规范中有关全局和本地引用的部分。您还需要考虑使用弱引用而不是全局引用。 关于java-JNI:Overhead

c++ - g++ 不允许在 lambda 中通过引用广义捕获 const 对象?

这被g++(4.9.3和5.2.0)拒绝,但被clang3.5.0接受:intmain(){constintci=0;autolambda=[&cap=ci](){};}g++给出错误:将“constint”绑定(bind)到“int&”类型的引用会丢弃限定符。看起来g++拒绝允许捕获非常量引用,当然除了使用普通的旧C++11捕获[&ci]。这似乎是一个非常奇怪的约束,也许是g++中的错误? 最佳答案 您的代码有效。§5.1.2/11去Aninit-capturebehavesasifitdeclaresandexplicitlyc

c++ - 为什么将 "pointer to pointer to non-const"转换为 "pointer to pointer to const"是不合法的

将非const指针转换为const指针是合法的。那为什么将指向非const的指针转换为指向const的指针是不合法的呢?例如,为什么下面的代码是非法的:char*s1=0;constchar*s2=s1;//OK...char*a[MAX];//akachar**constchar**ps=a;//error! 最佳答案 来自标准:constcharc='c';char*pc;constchar**pcc=&pc;//notallowed*pcc=&c;*pc='C';//wouldallowtomodifyaconstobject

c++ - 关于将 const 引用绑定(bind)到临时对象的子对象

代码如下#includestructP2d{doublex,y;P2d(doublex,doubley):x(x),y(y){}~P2d(){printf("Destructorcalled\n");}};P2dcenter(){returnP2d(10,10);}intmain(intargc,constchar*argv[]){constdouble&x=center().x;printf("x=%.18g\n",x);return0;}g++(版本5.2.0)将在中输入printf之前销毁P2d临时实例main,但该值无论如何都会被保留(即,不是将x绑定(bind)到临时P2d实

c++ - const char[] 默认函数参数

我定义了这样一个类型:typedefcharsType[256];和一个带有默认参数的函数:voidfoo(constsTypeparam=NULL);MinGW(g++4.8.0)编译它没有错误。相反,VisualStudio2015(Tools14.0)给出了以下错误:errorC2040:'sType':'int'differsinlevelsofindirectionfrom'char[256]'我试图将NULL转换为constchar[],但这会导致:errorC2440:'typecast':cannotconvertfrom'int'to'constchar[]'有什么提

c++ - 在 C++ 中创建对三元运算符结果的 const 引用是否安全?

这段代码中发生了一些不明显的事情:floata=1.;constfloat&x=true?a:2.;//Note:`2.`isadoublea=4.;std::coutclang和gcc输出:4,1人们会天真地期望相同的值被打印两次,但事实并非如此。这里的问题与引用无关。有一些有趣的规则规定了的类型?:。如果两个参数的类型不同并且可以转换,则它们将使用临时对象。引用将指向的临时值?:。上面的示例编译正常,并且在使用-Wall编译时可能会或可能不会发出警告,具体取决于您的编译器版本。下面是一个例子,说明在看起来合法的代码中出错是多么容易:templateconstT&min(constI

c++ - 专门针对 const 成员函数指针

我正在尝试将一些实用程序代码专门用于const成员函数,但在让简单的测试用例工作时遇到问题。为了简化工作,我正在使用Boost.FunctionTypes及其components模板-应该是contain的MPL序列标签const_qualified对于const成员函数。但是使用下面的测试代码,常量成员函数的特化失败了。有人知道如何让它发挥作用吗?测试代码打印出来(使用VC8和boost1.40):non-constnon-const预期输出是:non-constconst测试代码本身:#include#include#include#include#includenamespace

c++ - 将 C++ 类与 Objective C 类混合

我使用的是iphoneSDK,主要使用C++进行编码,同时使用obj-c中的部分SDK。在需要obj-c类的情况下是否可以指定C++类?例如:1)将委托(delegate)设置为obj-c对象时。我无法使C++类派生自委托(delegate)协议(protocol),因此这个原因和可能的其他原因阻止我使我的C++类成为各种obj-c对象的委托(delegate)。作为解决方案,我所做的是创建一个obj-c适配器类,其中包含指向C++类的ptr并用作委托(delegate)(在调用时通知C++类)。每次我需要将委托(delegate)通知发送给C++类时,都感觉很麻烦。2)设置选择器时这