草庐IT

is_const

全部标签

c++ - const public 成员有什么问题?

我正在阅读一些代码,其中一个类具有私有(private)const数据成员,然后是一大堆提供对这些数据成员的只读访问的公共(public)方法。这有什么意义呢?为什么不直接公开这些私有(private)数据成员呢?它们是常量,因此根据定义访问是只读的,人们可以通过theClass.theMember而不是theClass.getTheMember()访问它们,后者更容易,另外您可以避免首先创建所有这些公共(public)方法。每个成员变量一个,这意味着O(n)效率低下! 最佳答案 除非访问器方法除了提供引用之外实际上还做了一些事情,

c++ - is_assignable 和 std::unique_ptr

Here是来自gcc的测试文件,livedemostructdo_nothing{templatevoidoperator()(T*){}};intmain(){inti=0;std::unique_ptrp1(&i);std::unique_ptrp2;static_assert(!std::is_assignable::value,"");//note!here.}std::is_assignableIftheexpressionstd::declval()=std::declval()iswell-formedinunevaluatedcontext,providesthemem

c++ - GCC 模板推导消除 const 错误?

我发现这段代码可以用GCC7.3编译和运行,但不能用clang7编译和运行:conststd::vectorfoo({1,2,3,4});foo.clear();我预计会出现编译器错误,但GCC很乐意清除vector。 最佳答案 这是GCC错误83818;它已通过GCC8修复。不幸的是,那里没有更多信息——唯一的“修复”似乎是不使用类模板参数推导或升级编译器。 关于c++-GCC模板推导消除const错误?,我们在StackOverflow上找到一个类似的问题:

c++ - 带有 const char* 变量的 printf 问题

我陷入了printf问题。如果我能在这里得到一些帮助,我将不胜感激:在下面的代码中,我可以看到字体系列在第一个printf()中被正确置换,但是如果我将它设置为变量,我只会得到一个空字符串。我怎样才能把它放在一个变量中并获得正确的值?我只是不想到处输入“font.family().family().string().utf8().data()”?我用同样的方法做了这个:voidmyMethod(){constchar*fontFamily=font.family().family().string().utf8().data();//getdisplayedcorrectlyprint

c++ - 关于多线程环境下static const变量的使用

我正在尝试了解潜在的场景以及它是否可能成为问题。所以我有一个当前线程安全的静态函数。函数是这样的:staticthread_safe_func(){...process}现在在此函数中,我添加以下内容:staticthread_safe_func(){staticconstClass::NonThreadSafeClassName()*array[16]={Class::NonThreadSafeClassName(),Class::NonThreadSafeClassName(),Class::NonThreadSafeClassName(),Class::NonThreadSafe

c++ - 统一 const T& 和 T&& 重载

我有以下两个函数模板重载:templateoptionalsome(constT&x){returnoptional(x);}templatetypenamestd::enable_if::value,optional>::typesome(T&&x){returnoptional(std::move(x));}我第一次尝试通过完美转发统一重载失败了:templateoptionalsome(T&&x){returnoptional(std::forward(x));}error:formingpointertoreferencetype'conststd::basic_string&

c++ - 将 vector<int*> 视为 vector<const int*> 而无需复制 (C++0x)

一个类包含一个std::vector.外部代码需要对该vector进行只读访问,不应修改其内容(无论是指针还是它们的内容)。在类内部,值可能发生变化(例如double_values(),因此将它们存储为std::vector是不可能的。有没有办法返回std::vector作为std::vector没有复制?感觉应该有,因为const只是在编译期操作,说什么可以修改,什么不可以修改。代码:(用g++-std=c++0x编译)classReadOnlyAccess{public:ReadOnlyAccess(conststd::vector&int_ptrs_param):int_ptrs

c++ - Qt 信号/槽 : Is it an error to emit a signal from a temporary object?

在Qt中,如果从一个临时对象中调用一个信号,使得该对象可能在调用槽时被删除,这是一个错误吗?如果相关,代码会从临时对象的构造函数发出信号。(注意:没有指针或引用作为参数传递,所以这不是关于悬挂指针或引用的问题。我只是想知道,以最简单的形式,从Qt中的一个临时对象。)这是我的代码的简化版本://MyapplicationclassHandyApplication:publicQApplication{Q_OBJECTpublic:explicitHandyApplication(intargc,char*argv[]);signals:publicslots:voidhandySlot(

c++ - 如何在 std::set<int*> 中找到 const int*?

首先,我有一套std::setmy_set;然后,我有一个函数来检查my_set中是否存在一个特定的int指针p,它只是返回true如果it指针存在于其中,否则为false。由于函数不修改被引用的int,所以很自然的把指针当作constint*,即boolexists_in_my_set(constint*p){returnmy_set.find(p)!=my_set.end();}但是,当我尝试编译代码时,出现以下错误:error:invalidconversionfrom'constint*'to'std::set::key_type{akaint*}'[-fpermissive]

c++ - 为什么 "const Eigen::Matrix<>&"和 "const Ref<Eigen::Matrix<>>"显然不兼容?

这是我的示例代码:(请注意#ifENABLE_MY_COMPILE_ERROR包围的部分)#include#include#defineENABLE_MY_COMPILE_ERROR1voidf1(constEigen::Refa,constEigen::Refb,Eigen::Refc){c=a*b;}intmain(intargc,constchar*argv[]){Eigen::Matrix3dM;Eigen::Vector3dx;Eigen::Vector3dy;M.setRandom();x.setRandom();std::cout这是我在ENABLE_MY_COMPILE