草庐IT

const-string

全部标签

C++ :Why the regular expression pattern"[+-/* ]"matches string ".“?

我使用的正则表达式有什么问题吗?#include#include#includeusingnamespacestd;intmain(intargc,char*argv[]){smatchresults;stringtemp("[+-/*]");stringtest(".");regexr(temp);if(regex_search(test,results,r))cout“。”将被打印出来,如果我使用'\'创建转义序列,如:stringtemp("[\\+-/\\*]");输出仍然存在。 最佳答案 问题在于-在字符类[]中的解释不同

c++ - 为什么这个 std::string C++ 代码没有给出编译时错误?

我有以下片段:#includeintmain(intargc,char*argv[]){std::stringa,b,c;a+b=c;return0;}为什么这个C++代码没有给出编译时错误?这可能是因为std::string::operator+的实现方式,但我的问题是:为什么要这样实现?在什么情况下需要这种行为? 最佳答案 您可以分配给临时对象。没有规则阻止这种情况。如果您不想临时调用成员函数(在r-value上,更一般地说),您可以使用ref-qualifier在函数声明中。但如你所见here,std::string::ope

c++ - std::string_view 编译时散列

似乎std::hashfunctions对于C++17string_view不是constexpr的。在我看来,绑定(bind)到constchar[]的字符串View可以在编译时进行哈希处理(这会非常好),或者有什么可以阻止这种情况吗? 最佳答案 从C++14开始(参见17.6.3.4哈希要求,表26),我们有:Thevaluereturnedshalldependonlyontheargumentkforthedurationoftheprogram.[Note:Thusallevaluationsoftheexpression

c++ - 如何将低级常量应用于模板变量。我正在尝试编写一个 const_cast 实现

如何让这个static_assert传递到我失败的代码中?我尝试了T周围const的所有排列,但我无法获得constint*。编译器总是将其解释为int*const。templateunionconst_cast_impl{usingCT=constT;static_assert(std::is_same::value,"CTisnotconstint*");Tdata;CTcdata;const_cast_impl(CTptr):cdata(ptr){}operatorT(){returndata;}};intmain(){inta=2;constint*ptr=&a;int*ptr

c++ - 如何像 C++ const/constexpr 一样定义 CUDA 设备常量?

在.cu文件中,我在全局范围内尝试了以下操作(即不在函数中):__device__staticconstdoublecdInf=HUGE_VAL/4;并得到nvcc错误:error:dynamicinitializationisnotsupportedfor__device__,__constant__and__shared__variables.如果可能的话,如何在设备上定义C++const/constexpr?注意1:#define是不可能的,不仅出于美学原因,而且因为在实践中表达式更复杂并且涉及内部数据类型,而不仅仅是double。因此,每次在每个CUDA线程中调用构造函数的代价

c++ - 在不复制的情况下划分 std::string

是否可以在不复制的情况下将std::string分成两个或更多子字符串,就像我们可以使用移动构造函数创建一个新的std::string不复制? 最佳答案 你不能用std::string来做到这一点。但是,您可以使用C++17中的std::string_view来做到这一点。例子:std::stringstr="TheBigStr";std::string_viewp1=std::string_view(str.data()+3,3);字符串View不复制数据,因此在使用View时不应修改str。

c++ - 从 const string 到 bool 的隐式转换

这个问题在这里已经有了答案:WhyisthereanimplicittypeconversionfrompointerstoboolinC++?(3个答案)关闭5年前。我有以下代码:#include#includevoidfoo(boola){std::cout执行时我得到这个输出:bool我期望的输出是:string为什么g++4.9将此字符串隐式转换为bool?

c++ - 用双花括号初始化 vector<string>

有人可以解释下例中使用双花括号和单花括号初始化的行为差异吗?代码#1:vectorv={"a","b"};stringc(v[0]+v[1]);cout输出#1:c=abc.c_str()=ab代码#2:vectorv={{"a","b"}};stringc(v[0]+v[1]);cout输出#2:c=a\acke�Z\c.c_str()=a 最佳答案 隐式转换中心。这就是正在发生的事情。vectorv={"a","b"};您可以通过提供包含两个元素的初始化列表来初始化vector。两个std::strings从字符串文字初始化,然

c++ - Static Cast 访问静态 const 类成员

这个问题在这里已经有了答案:Undefinedreferencetostaticconstint(9个回答)关闭5年前。所以昨天我正在寻找SO,但找不到以下问题的答案。这种情况来self正在使用的一些代码,但这里是MCVE来演示它。我在A.h中定义了一个类A,其中只有一个静态常量。我已经在标题中对其进行了初始化。#ifndefA_H_#defineA_H_classA{public:staticconstinttest=5;~A(){};};#endif/*A_H_*/然后我有一个B类需要从A类访问publicstaticconst。在这个例子中,它将把值深度复制到一个vector中。

c++ - 二进制表达式 ('const char*' 和 'const char *' 的无效操作数)

这个问题在这里已经有了答案:Can'taddstringsinC++(7个答案)关闭4年前。我想用简单的语言知道这个错误的原因。#include#includeintmain(){std::stringexclam="!";std::stringmessage="Hello"+",world"+exclam;std::couttest.cpp:55:35:error:invalidoperandstobinaryexpression('constchar*'and'constchar*')std::stringmessage="Hello"+",world"+exclam;