在重构一些代码的同时,我遇到了一些返回std :: string的getter方法。 像这样的东西,例如: class foo { private: std::string name_; public: std::string name() { return name_; } }; 当然,getter会更好的返回一个const std::string& ? 目前的方法是返回一个效率不高的副本。 会返回一个const引用,而不是导致任何问题?
我正在阅读的很多书籍都使用关键字const时,不应该修改variables的值。 除了向代码读者指定如果您修改此variables(您可以使用注释执行此操作),您可能会导致错误,为什么您需要该关键字成为任何编程语言的一部分? 在我看来,如果你不想要一个variables修改,根本就不要。 有人能为我澄清这个吗?
我知道它提高了可读性,使得程序不易出错,但是提高性能有多less? 另外,注意,引用和const指针之间的主要区别是什么? 我会假设他们以不同的方式存储在内存中,但是如何呢? 谢谢。
我正在写一个C ++的共享指针的访问器方法,如下所示: class Foo { public: return_type getBar() const { return m_bar; } private: boost::shared_ptr<Bar> m_bar; } 所以为了支持getBar()的const性,返回types应该是一个boost::shared_ptr ,它可以防止修改它指向的Bar 。 我的猜测是shared_ptr<const Bar>是我想要返回的types,而const shared_ptr<Bar>会阻止指针本身的重新分配指向不同的Bar但允许修改它指向的Bar 。但是,我不确定。 我会很感激,如果有人知道肯定可以证实这一点,或纠正我,如果我错了。 谢谢!
根据我的理解, const修饰符应该从右到左读。 从那里,我明白了: const char* 是一个指针,它的char元素不能被修改,但指针本身可以和 char const* 是一个mutable字符的常量指针。 但是我得到以下代码的错误: const char* x = new char[20]; x = new char[30]; //this works, as expected x[0] = 'a'; //gives an error as expected char const* y = new char[20]; y = new char[20]; //this works, although the pointer should be const (right?) y[0] = 'a'; //this […]
我看到以下是好的: const Tab = connect( mapState, mapDispatch )( Tabs ); export default Tab; 但是,这是不正确的: export default const Tab = connect( mapState, mapDispatch )( Tabs ); 然而这很好: export default Tab = connect( mapState, mapDispatch )( Tabs ); 请解释为什么const export default是无效的? 这是一个不必要的补充和任何声明为export default是推定为一个const或这样的?
在下面的C++程序中,从const函数修改静态数据成员工作正常: class A { public: static int a; // static data member void set() const { a = 10; } }; 但是从const函数修改非静态数据成员不起作用: class A { public: int a; // non-static data member void set() const { a = 10; } }; 为什么一个const成员函数可以修改一个static数据成员?
这个const的目的是什么? const Object myFunc(){ return myObject; } 我刚刚开始阅读有效的C + +和项目3提倡这一点,谷歌search拿起类似的build议,但也反例。 我不明白如何在这里使用const将是可取的。 假设按价值回报是可取的,我不认为有任何理由来保护返回的价值。 给出的例子为什么这可能是有益的是防止意想不到的布尔转换的返回值。 那么实际的问题是,应该用explicit关键字来防止隐式bool转换。 在这里使用const可以防止在不分配的情况下使用临 所以我不能用这些对象来执行算术expression式。 似乎没有一个无名的const有用的情况。 在这里使用const获得了什么,什么时候会更好? 编辑:将算术示例更改为任何修改您可能要在分配之前执行的对象的任何函数。 (这是我的第一篇文章,哇,我不能相信有多快,人们把代码示例和坑坑洼洼的链接,好的答案,谢谢!)
我们知道一个“constvariables”表示一旦赋值,就不能更改variables,如下所示: int const i = 1; i = 2; 上面的程序将不能编译; gcc提示错误: assignment of read-only variable 'i' 没问题,我可以理解,但下面的例子超出我的理解: #include<iostream> using namespace std; int main() { boolalpha(cout); int const i = 1; cout << is_const<decltype(i)>::value << endl; int const &ri = i; cout << is_const<decltype(ri)>::value << endl; return 0; } 它输出 true false 奇怪的。 我们知道,一旦引用绑定到一个名称/variables,我们不能改变这个绑定,我们改变它的绑定对象。 所以我想ri的types应该和i :当i是一个int […]
Axel Rauschmayer博士在探索ES6中有const定义 : const像let一样工作,但是你声明的variables必须立即被初始化, 并且后面的值不能被改变 。 […] const bar = 123; bar = 456; // TypeError: `bar` is read-only 然后他写道 陷阱:const不会使值不可变 const只意味着一个variables总是具有相同的值,但这并不意味着该值本身是或变成不可变的。 我很困惑这个陷阱。 任何人都可以用这个缺陷清楚地定义const吗?