草庐IT

add_const

全部标签

c++ - 如何返回不可用的 const 引用

假设我有以下功能:conststd::string&Cat::getKittenName()const{Kitten*kitty=getKitty();returnkitty->getName();}Kitten::getName返回conststd::string&我如何最好地处理kitty是的情况空指针?我可以返回std::string("")但随后我返回对临时且实际上保证未定义行为的引用。我可以更改getKittenName函数以返回一个std::string来解决这个问题,但是我会为kitty可用。现在我觉得最好的选择是:conststd::string&Cat::getKit

c++ - CMake include_directories 和 add_subdirectory 之间的区别?

我正在学习CMake以构建C++代码,并在以下概念中苦苦挣扎。在我的根目录中,我有一些cpp文件和一个CMakeLists.txt,它成功地在gen-cpp目录中生成了一些Thrift代码。我的根级CMakeLists.txt包含:include_directories("路径到根目录"/gen-cpp)。(以及相关的Thrift自动生成和包含。一切编译正常,但我得到运行时动态库链接错误,因为undefinedsymbol引用了gen-cpp目录中定义的类。当我将目录中的文件移动到根级别时,它运行良好。我错过了什么?(我还调整了根级cpp目录中的#include以指向“path-to-

c++ - CMake include_directories 和 add_subdirectory 之间的区别?

我正在学习CMake以构建C++代码,并在以下概念中苦苦挣扎。在我的根目录中,我有一些cpp文件和一个CMakeLists.txt,它成功地在gen-cpp目录中生成了一些Thrift代码。我的根级CMakeLists.txt包含:include_directories("路径到根目录"/gen-cpp)。(以及相关的Thrift自动生成和包含。一切编译正常,但我得到运行时动态库链接错误,因为undefinedsymbol引用了gen-cpp目录中定义的类。当我将目录中的文件移动到根级别时,它运行良好。我错过了什么?(我还调整了根级cpp目录中的#include以指向“path-to-

c++ - "const T*"可以匹配指向自由函数的指针吗?

在relatedquestion中,据说没有指向非成员const函数的指针。另外,C++118.3.5/6说Theeffectofacv-qualifier-seqinafunctiondeclaratorisnotthesameasaddingcv-qualificationontopofthefunctiontype.Inthelattercase,thecv-qualifiersareignored.[Note:afunctiontypethathasacv-qualifier-seqisnotacv-qualifiedtype;therearenocv-qualifiedfun

c++ - "const T*"可以匹配指向自由函数的指针吗?

在relatedquestion中,据说没有指向非成员const函数的指针。另外,C++118.3.5/6说Theeffectofacv-qualifier-seqinafunctiondeclaratorisnotthesameasaddingcv-qualificationontopofthefunctiontype.Inthelattercase,thecv-qualifiersareignored.[Note:afunctiontypethathasacv-qualifier-seqisnotacv-qualifiedtype;therearenocv-qualifiedfun

c++ - 是否应该通过 const 引用传递小的简单结构?

我一直被教导非原始类型应该通过const引用而不是在可能的情况下通过值传递,即:voidfoo(std::stringstr);//badvoidfoo(conststd::string&str);//good但我今天在想,也许实际上一些简单的用户定义类型实际上可能更好地按值传递,例如:classVector2{public:floatx,y;...constructors,operatorsoverloads,utilitymethods,etc...};voidfoo(Vector2pos);voidfoo(constVector2&pos);//isthisreallybette

c++ - 是否应该通过 const 引用传递小的简单结构?

我一直被教导非原始类型应该通过const引用而不是在可能的情况下通过值传递,即:voidfoo(std::stringstr);//badvoidfoo(conststd::string&str);//good但我今天在想,也许实际上一些简单的用户定义类型实际上可能更好地按值传递,例如:classVector2{public:floatx,y;...constructors,operatorsoverloads,utilitymethods,etc...};voidfoo(Vector2pos);voidfoo(constVector2&pos);//isthisreallybette

c++ - 为什么Visual C++在C中而不是从C++中警告从const void **到void *的隐式强制转换?

概要当C程序试图将指向const数据的指针(如constvoid**或constchar**)转换为void*时,MicrosoftVisualStudio中的C/C++编译器会给出警告C4090(即使这种类型实际上并非指向const的指针)。更奇怪的是,同一个编译器静默地接受作为C++编译的相同代码。这种不一致的原因是什么?为什么VisualStudio(与其他编译器不同)在将指向const的指针隐式转换为void*时存在问题?细节我有一个C程序,其中将通过变量参数列表传递的C字符串读入数组(通过调用va_arg的循环)。由于C字符串的类型为constchar*,因此跟踪它们的数组的

c++ - 为什么Visual C++在C中而不是从C++中警告从const void **到void *的隐式强制转换?

概要当C程序试图将指向const数据的指针(如constvoid**或constchar**)转换为void*时,MicrosoftVisualStudio中的C/C++编译器会给出警告C4090(即使这种类型实际上并非指向const的指针)。更奇怪的是,同一个编译器静默地接受作为C++编译的相同代码。这种不一致的原因是什么?为什么VisualStudio(与其他编译器不同)在将指向const的指针隐式转换为void*时存在问题?细节我有一个C程序,其中将通过变量参数列表传递的C字符串读入数组(通过调用va_arg的循环)。由于C字符串的类型为constchar*,因此跟踪它们的数组的

c++ - 使用结构化绑定(bind)标记为 const 的变量不是 const

我一直在编写一组类来实现类似python的简单zip函数。以下代码段(几乎)按预期工作。但是a和b这两个变量不是const。std::vectorv1{0.0,1.1,2.2,3.3};std::vectorv2{0,1,2};for(autoconst&[a,b]:zip(v1,v2)){std::cout我一直在使用gcc7.3.0。这是MCVE:#include#include#includetemplateclasszip_iterator{usingvalue_iterator_type=std::tuple()))...>;usingvalue_type=std::tupl