草庐IT

MY_CONST

全部标签

c++ - 无法将 ‘std::string’ 转换为‘const char*

嗨,有人能告诉我这段代码有什么问题吗?strings=getString();//returnstringif(!strcmp(s,"STRING")){//Dosomething}编译时出现如下错误error:cannotconvert‘std::string’to‘constchar*’forargument‘1’to‘intstrcmp(constchar*,constchar*)’| 最佳答案 strcmp接受constchar*作为参数。您可以使用c_str方法:if(!strcmp(s.c_str(),"STRING")

c++ - f(const string &) 和 f(const string ) 之间有什么区别吗?

classmystring{friendostream&operator考虑到上面的例子,我们不能修改传引用变量,也不能修改传值变量。每种方法的输出都是一样的。因为这两种方法没有区别,为什么C++支持这两种方法?谢谢。 最佳答案 两者是有区别的。请考虑以下事项:#include#includeusingstd::string;stringg_value;voidcallback(){g_value="blue";}voidProcessStringByRef(conststring&s){callback();std::cout输出

c++ - 如何在 C++20 中安全地将 const char* 转换为 const char8_t*?

来自thisanswer我了解到,在C++17中,我们可以通过std::filesystem::u8path使用UTF-8路径打开std::fstream。但在C++20中,这个函数已被弃用,我们应该将constchar8_t*传递给std::filesystem::path构造函数。问题来了:虽然我们可以合法地转换(通过reinterpret_cast)任何指向constchar*的指针,但我们不能反向操作:fromconstchar*到例如constchar8_t*(它会打破严格的别名规则)。因此,如果我们有一些外部API返回文件名的基于char的UTF-8表示(例如,来自用C编写

c++ - *static* 成员函数的 const 和非常量版本

我有两个版本的同一个静态成员函数:一个接受一个指向常量的指针参数,另一个接受一个指向非常量的指针参数。我想避免代码重复。在阅读了一些堆栈溢出问题后(虽然这些都是关于非静态成员函数的)我想到了这个:classC{private:staticconsttype*func(consttype*x){//longcode}statictype*func(type*x){returnconst_cast(func(static_cast(x)));}public://somecodethatusesthesefunctions};(我知道玩弄指针通常是个坏主意,但我正在实现一个数据结构。)我在l

c++ - 从函数返回类型中删除 const 是否会破坏 ABI?

假设我有一个库声明了一个返回const类型的函数:classFoo{...};constFoomakeFoo();现在我想从makeFoo()返回类型中删除const(参见我的previousquestion)。我可以从头文件和cpp文件中删除const,重建库,并将我的代码链接到新库。但是,我也有动态链接到这个库的旧代码,我希望它继续与新版本的库一起工作。那么,第一个问题,从返回类型中删除const会破坏ABI吗?第二个问题,实际代码有很大不同:它是一个模板类,有一个静态成员函数,然后显式实例化://fooMaker.htemplateclassFooMaker{public:sta

c++ - 在函数声明中尾随 const& 或 &&

这个问题在这里已经有了答案:Whatis"rvaluereferencefor*this"?(3个答案)关闭9年前。我正在查看std::optional的API在cppreference.我很好奇如何value_or会工作。看那里,似乎有两个重载:templateconstexprTvalue_or(U&&value)const&;templateTvalue_or(U&&value)&&;什么是const&和&&尾随函数声明?将函数声明为const有什么区别?并将其声明为const&?

运算符情况下的 C++ const 转换

考虑以下代码:structA{voidoperator++()const{}};voidoperator++(constA&){}intmain(){constAca;++ca;//g++Error(asexpected):ambiguousoverloadfor‘operator++’Aa;++a;//g++Warning:"ISOC++saysthattheseareambiguous,//eventhoughtheworstconversionforthefirstisbetter//thantheworstconversionforthesecond"//candidate1:

c++ - Constexpr 转换为 const char[]

很多人都遇到过,我也遇到过。我在C++中使用编译时字符串时遇到了困难。我决定采用显然无法使用的方法:使用template类。这是我想出来的,很普通,没什么特别的,而且也行不通。templateclassstring{public:staticconstexprconstcharvalue[]={chars...};constexprstring(){}constexproperatordecltype(value)&()const{returnvalue;}};templateconstexprconstcharstring::value[];我的想法是制作一个string实例cons

c++ - const_iterator 和 const 指针

Lippman等人在C++primerFifthEdition的第108页上说:Aconst_iteratorbehaveslikeaconstpointer(§2.4.2,p.62).Likeaconstpointer,aconst_iteratormayreadbutnotwritetheelementitdenotes;[...]const_iterator的功能我明白了,但是这个比较正确吗?我认为它的行为更像是“指向const的指针”。我是不是误会了什么? 最佳答案 你是对的。作者明确引用了他们书中的第2.4.2节(我刚刚更

c++ - 是否应该在 C++ 头文件中初始化 const 静态变量?

我的测试.h#ifndefMY_TEST#defineMY_TESTstructobj{intx;inty;};classA{private:conststaticinta=100;conststaticobjb;};constobjA::b={1,2};#endif当使用这个头文件编译cpp时,出现错误'multipledefinitionof'A::b'。为什么我已经在使用保护宏了?为什么A::a不产生错误?(我不能在classA中编写代码conststaticobjb={1,2}) 最佳答案 whyisthiswhenIhav