草庐IT

const_defined

全部标签

c++ - const_cast 和 UB

$5.2.11/7-"[Note:Dependingonthetypeoftheobject,awriteoperationthroughthepointer,lvalueorpointertodatamemberresultingfromaconst_castthatcastsawayaconst-qualifier68)mayproduceundefinedbehavior(7.1.5.1).]"这部分(C++03)的措辞让我感到惊讶。令人惊讶的是两件事。a)首先,“可能”的使用。为什么是“可以”?标准中的其他地方对未定义的行为非常明确b)为什么不是直接抛弃“未定义行为”的原始co

c++ - 在 C/C++ 中初始化结构的 const 成员...取决于编译器?

最近我在使用BorlandC++5.2的遗留环境中遇到编译器错误。我有一个.cpp文件,其中包含来自某些我无法控制的C源代码的header。header包含一个包含const成员的结构定义,编译器提示“类中没有构造函数的常量成员”。经调查,此错误似乎与编译器相关。下面是一些带有各种编译器结果的示例代码:#includetypedefstruct{constfloata;}_floater;intmain(){_floaterf={5.1F};printf("%f\r\n",f.a);return0;}Borland5.2E:\Projects\Scratchpad>bcc32-Pcon

c++ - 如何克服 make_shared constness

我遇到了一个问题,无法决定正确的解决方案是什么。下面是用于说明的代码示例:#include#includeclassTestClass{public:inta;TestClass(int&a,intb){};private:TestClass();TestClass(constTestClass&rhs);};intmain(){intc=4;boost::shared_ptrptr;//NOTE:twostepinitializationofsharedptr//ptr=boost::make_shared(c,c);//(newTestClass(c,c));}问题是我无法创建sh

c++ - Getter 函数的 Const 正确性

这是一个关于const正确性的简单问题。我有这门课:templateclassFoo{public:std::mapmembers;templatestd::vector&member(conststd::string&memberName){returnboost::any_cast&>(members[memberName]);}};然后我有一个包含以下内容的仿函数:booloperator()(Foo&foo)const{std::vector&member=foo.member(_memberName);这里让我感到困惑的是我不能通过引用const来传递Foo,因为我正在调用非

c++ - 如何理解函数ostream& operator<< (ostream& os, const unsigned char* s)

对于像这样的函数声明ostream&operator我想知道返回了什么。CPP引用说它返回ostream对象。但为什么它是ostream&而不是简单的ostream?谢谢 最佳答案 运算符返回ostream&(即对ostream对象的可修改引用)而不是拷贝或void的原因是它允许链接,因为实例,以std::cout作为ostream对象的常见示例:unsignedinti=2;std::cout这里我们链接了两个constchar*,一个unsignedint和一个流修饰符,而不必用单独的行将它们分开,这使得阅读和明白了。

c++ - 对临时对象的 const 引用在函数作用域(生命周期)后被破坏

在询问时thisquestion,我了解到对临时对象的const引用在C++中是有效的:intmain(){inta=21;intb=21;//error:invalidinitializationofnon-constreference//int&sum=a+b;e[...]//OKintconst&sum=a+b;returnsum;}但在下面的例子中,常量引用refnop指的是一个被销毁的临时对象。我想知道为什么?#include#includestructA{//datastd::mapm;//functionsconstA¬hing()const{return*this

c++ - C++ : why does free not accept a const void*, 中的 malloc/free 有更好的方法吗?

这个问题在这里已经有了答案:UnabletofreeconstpointersinC(12个答案)关闭8年前。将C++11代码连接到某些C回调,我必须传递constchar*const*,即字符串数组。这是我的代码的简化版本:intmain(int,char**){constintcnt=10;constchar*const*names=static_cast(malloc(sizeof(char*)*cnt));//...allocatingnames[0],etc.comingsoon...the_c_function(names);free(names);return0;}所以我

c++ - 您可以使用#define 来更改#include 吗?

是否可以使用#include更改包含的库?或#include"foo"在预占有期间变成不同的东西,所以它会充当不同的库,例如#include?我有一个无法使用当前#include的库只在一种情况下声明,但在其他地方工作正常,所以我不想直接改变它。是否可以使用#define解决这个问题? 最佳答案 有两种方法可以做到这一点。更简单、更明显的方法:#defineINCLUDE_FOO//...#ifdefINCLUDE_FOO#include#else#include#endif还有更短但更挑剔的方式:#defineFOO_HEADER

c++ - 如果 C++ 类同时包含 const 引用和非 const 引用复制构造函数怎么办?

片段1:#includeusingnamespacestd;classC{public:C(){}C(constC&c){cout输出:调用的const复制构造函数片段2:#includeusingnamespacestd;classC{public:C(){}C(constC&c){cout输出:调用了非常量复制构造函数片段3:#includeusingnamespacestd;classC{public:C(){}C(constC&c){cout输出:错误:复制构造函数必须通过引用传递它的第一个参数我很困惑:对于片段2,为什么此处的非常量复制构造函数有效?为什么调用非const复制

c++ - #define for(int z=0;z<2;++z)for(int z=0;z<2;++z)for 中的第三个 'for' 是什么意思

我在一个C++程序中找到了一段代码,好像每隔for()循环两次。在这个程序中循环,但为什么在这样的预处理器定义中需要第三个for呢?#defineforfor(intz=0;z 最佳答案 它取代了for与for(intz=0;z.显然,那会变成for(inti=0;i进入for(intz=0;z因此创建了两个嵌套循环。没有那个额外的for会是for(intz=0;z这显然是不正确的。请注意,即使您在问题中提供的形式是“正确的”,但这并不意味着它是“良好做法”。这是过度滥用宏的示例,必须避免。这是它可能出错的众多示例之一:for(in