假设我有一个类定义如下: class foo{}; 现在,这是完全可以接受的。 foo f; 怎么这是一个编译器错误? ( uninitialized const 'f' ) const foo f; 为什么我们要这样做? const foo f = foo(); 我知道为什么我们不能这样做.. const foo f(); // though it compiles.. 有趣的是,以下是有效的: const std::string f; 那么从foo缺less什么? 我意识到这里有三个问题,这是一个糟糕的forms,但我希望有人能够在一个答案中为我解决这个问题。 编辑:请随时closures它,如果它是愚蠢的…
这个问题可能是天真的,但是: C中有const关键字吗? 从哪个版本? C和C ++中的const之间是否存在任何语义和/或语法差异?
这样的事情有什么区别? friend Circle copy(const Circle &); 和这样的事情 friend Circle copy(Circle&) const; 我知道const函数用于告诉编译器,这个函数不会试图改变它被调用的对象,另一个呢?
如果我使用的只是一个方法中需要的常量,最好在方法范围内还是在类范围内声明const? 在方法中声明它有更好的性能吗? 如果这是真的,我认为在类范围(文件顶部)中定义它们以更改值和重新编译更为简单。 public class Bob { private const int SomeConst = 100; // declare it here? public void MyMethod() { const int SomeConst = 100; // or declare it here? // Do soemthing with SomeConst } }
除了确保它们不能被改变(对编译器错误的调整)之外,JIT是否对const本地进行了优化? 例如。 public static int Main(string[] args) { const int timesToLoop = 50; for (int i=0; i<timesToLoop; i++) { // … } }
我正在实现一个类似STL的接口的自定义容器。 我必须提供一个常规的迭代器和一个常量迭代器。 迭代器的两个版本的大部分代码是相同的。 我怎样才能避免这种重复? 例如,我的容器类是Foo ,我正在实现FooIterator和FooConstIterator 。 这两个迭代器都必须提供像operator++()这样的方法,它们是相同的。 我的问题类似于如何删除类似的const和非const成员函数之间的代码重复? ,但是这个答案是特定于const和非const方法的,特别是访问器。 我不明白这是如何推广到迭代器的问题。 我应该让FooIterator从FooIterator派生,并用额外的非const方法扩展吗? 这要么导致虚拟方法或方法隐藏,这在这里看起来不合适。 也许FooIterator应该包含一个FooConstIterator 。 虽然这种方法确实减less了重复实施,但似乎重新引入了很多样板方法的定义。 是否有巧妙的模板技术从一个单一的定义生成两个迭代器? 或者也许有一种方式 – 不寒而栗 – 使用预处理器来消除这些几乎相同的类。 我试着看看我的本地STL实现,看看它是如何处理这个。 有这么多的帮助类,我有困难的devise,但它看起来像function只是重复。 在以前的项目中,我的自定义容器是build立在标准STL容器之上的,所以我不必提供自己的迭代器。 在这种情况下,这不是一个选项。
我在一个类中有几个容器,例如vector或map,其中包含shared_ptr到堆中的对象。 例如 template <typename T> class MyExample { public: private: vector<tr1::shared_ptr<T> > vec; map<tr1::shared_ptr<T> , int> h; }; 我想有一个这个类的公共接口,它有时返回给const对象(通过shared_ptr<const T> ),有时返回shared_ptr<T>我允许调用者mutate对象。 我想要逻辑常量的正确性,所以如果我标记一个方法为const,它不能改变堆上的对象。 问题: 1)我对tr1::shared_ptr<const T>和tr1::shared_ptr<T>的可交换tr1::shared_ptr<const T>困惑。 当有人将shared_ptr<const T> shared_ptr传递给类时,是否将其作为shared_ptr<T>或shared_ptr<const T>在vector和map中,或者是否更改map,vectortypes(例如insert_elemeent( shared_ptr<const T> obj)? 2)更好的实例化类如下: MyExample<const int> ? 这似乎过分限制,因为我永远不会返回一个shared_ptr<int> ?
C ++中“顶级”限定符的const是什么意思? 其他的水平是什么? 例如: int const *i; int *const i; int const *const i;
我知道你可以使用const_cast将一个const转换为非const 。 但是,如果你想将非const为const你应该使用什么?
是否有可能在C#中声明一个常量Guid? 我明白,我可以声明一个static readonly Guid ,但有没有一个语法,让我写const Guid ?