草庐IT

Constants

全部标签

c++ - const 成员函数的语义是什么?

我知道该函数不允许更改对象的状态,但我想我在某处读到允许编译器假设如果使用相同的参数调用该函数,它将返回相同的值并且因此可以重用缓存的值(如果可用)。例如classobject{intget_value(intn)const{...}...objectx;inta=x.get_value(1);...intb=x.get_value(1);然后编译器可以优化第二次调用并使用寄存器中的值或简单地执行b=a;这是真的吗? 最佳答案 const是关于程序语义而不是关于实现细节。当成员函数const不改变对象的可见状态时,您应该标记它,并且

c++ - const 成员函数的语义是什么?

我知道该函数不允许更改对象的状态,但我想我在某处读到允许编译器假设如果使用相同的参数调用该函数,它将返回相同的值并且因此可以重用缓存的值(如果可用)。例如classobject{intget_value(intn)const{...}...objectx;inta=x.get_value(1);...intb=x.get_value(1);然后编译器可以优化第二次调用并使用寄存器中的值或简单地执行b=a;这是真的吗? 最佳答案 const是关于程序语义而不是关于实现细节。当成员函数const不改变对象的可见状态时,您应该标记它,并且

c++ - 为什么字符串文字是 const?

众所周知,在C++中,字符串文字是不可变的,修改字符串文字的结果是未定义的。例如char*str="Hello!";str[1]='a';这将导致未定义的行为。此外,字符串文字被放置在静态内存中。所以它们存在于整个程序中。我想知道为什么字符串文字有这样的属性。 最佳答案 有几个不同的原因。一种是允许将字符串文字存储在只读内存中(正如其他人已经提到的那样)。另一个是允许字符串文字的合并。如果一个程序在几个不同的地方使用相同的字符串字面量,最好允许(但不一定要求)编译器合并它们,这样您就可以获得指向同一内存的多个指针,而不是每个指针占用

c++ - 为什么字符串文字是 const?

众所周知,在C++中,字符串文字是不可变的,修改字符串文字的结果是未定义的。例如char*str="Hello!";str[1]='a';这将导致未定义的行为。此外,字符串文字被放置在静态内存中。所以它们存在于整个程序中。我想知道为什么字符串文字有这样的属性。 最佳答案 有几个不同的原因。一种是允许将字符串文字存储在只读内存中(正如其他人已经提到的那样)。另一个是允许字符串文字的合并。如果一个程序在几个不同的地方使用相同的字符串字面量,最好允许(但不一定要求)编译器合并它们,这样您就可以获得指向同一内存的多个指针,而不是每个指针占用

C++ const 定位的区别

我正在努力弄清楚可以在c++中的函数声明上放置“const”的各个位置之间的差异。const开头的区别是什么:constintMyClass::showName(stringid){...}最后的const就像:intMyClass::showName(stringid)const{...}另外,像这样在开头和结尾都有const的结果是什么:constintMyClass::showName(stringid)const{...} 最佳答案 constintMyClass::showName(stringid)返回一个constin

C++ const 定位的区别

我正在努力弄清楚可以在c++中的函数声明上放置“const”的各个位置之间的差异。const开头的区别是什么:constintMyClass::showName(stringid){...}最后的const就像:intMyClass::showName(stringid)const{...}另外,像这样在开头和结尾都有const的结果是什么:constintMyClass::showName(stringid)const{...} 最佳答案 constintMyClass::showName(stringid)返回一个constin

c++ - const&& 在 range-for 中的应用?

是否存在在range-for循环中使用const&&确实有意义的情况?for(constauto&&x:c)//? 最佳答案 简短回答:否,在range-for循环(或其他)中constauto&&没有用处如果您希望以优化的方式移动对象,您可以使用rvaluereferences。除非您可以修改从中移动的对象,否则您不能这样做(通常)。所以constrvalues(*)没有实际用处(你不能离开它们,因为你不能修改它们)。range-for循环在这个关于constauto&&的讨论中没有提出任何问题。例如查看此SO帖子:Dorvalu

c++ - const&& 在 range-for 中的应用?

是否存在在range-for循环中使用const&&确实有意义的情况?for(constauto&&x:c)//? 最佳答案 简短回答:否,在range-for循环(或其他)中constauto&&没有用处如果您希望以优化的方式移动对象,您可以使用rvaluereferences。除非您可以修改从中移动的对象,否则您不能这样做(通常)。所以constrvalues(*)没有实际用处(你不能离开它们,因为你不能修改它们)。range-for循环在这个关于constauto&&的讨论中没有提出任何问题。例如查看此SO帖子:Dorvalu

c++ - 传递 const 类型地址时模板参数推导失败

templateTgo(Ta,T*b){T*t;return*t;}intmain(){constintx=10;go(x,&x);return0;}给出编译器错误:error:nomatchingfunctionforcallto‘go(constint&,constint*)’为什么第一个参数是引用类型constint&而不仅仅是constint?为了修复这个编译错误,我通过指定参数类型来覆盖编译器推导过程go(x,&x);,但为什么我需要这样做? 最佳答案 这是类型推导的冲突。T从第一个参数推导出为int,从第二个参数推导出为

c++ - 传递 const 类型地址时模板参数推导失败

templateTgo(Ta,T*b){T*t;return*t;}intmain(){constintx=10;go(x,&x);return0;}给出编译器错误:error:nomatchingfunctionforcallto‘go(constint&,constint*)’为什么第一个参数是引用类型constint&而不仅仅是constint?为了修复这个编译错误,我通过指定参数类型来覆盖编译器推导过程go(x,&x);,但为什么我需要这样做? 最佳答案 这是类型推导的冲突。T从第一个参数推导出为int,从第二个参数推导出为