标签: const

15
推荐指数
3
解决办法
449
查看次数

静态const对命名空间成员有什么影响

// MyClass.h

namespace MyNamespace {

  static const double GasConstant = 1.987;

  class MyClass
  {
    // constructors, methods, etc.
  };
}
Run Code Online (Sandbox Code Playgroud)

我以前在MyClass声明中声明了GasConstant(并且在源文件中有一个单独的定义,因为C++不支持const非整数类型的初始化).然而,我需要从其他文件访问它,从逻辑上看,它似乎应该驻留在命名空间级别.

我的问题是,static const在这种情况下会产生什么影响?显然const意味着我无法为GasConstant分配新值,但命名空间中的静态成员意味着什么.这类似于文件范围内的静态,其中成员在单元外是不可访问的吗?

c++ static namespaces const

15
推荐指数
1
解决办法
1万
查看次数

在c ++中使用typedef和templates进行常量引用

我听说临时对象只能分配给常量引用.

但是这段代码给出了错误

#include <iostream.h>    
template<class t>
t const& check(){
  return t(); //return a temporary object
}    
int main(int argc, char** argv){

const int &resCheck = check<int>(); /* fine */
typedef int& ref;
const ref error = check<int>(); / *error */
return 0;
}
Run Code Online (Sandbox Code Playgroud)

得到的错误是 invalid initialization of reference of type 'int&' from expression of type 'const int'

c++ templates const reference temporary

15
推荐指数
3
解决办法
4434
查看次数

const和非const函数的重载如何工作?

stl充满了这样的定义:

iterator begin ();
const_iterator begin () const;
Run Code Online (Sandbox Code Playgroud)

由于返回值不参与重载分辨率,因此这里唯一的区别就是函数的存在const.这是超载机制的一部分吗?什么是编译器解析线的算法,如:

vector<int>::const_iterator it = myvector.begin();
Run Code Online (Sandbox Code Playgroud)

c++ overloading const

15
推荐指数
2
解决办法
4327
查看次数

优化我的Backprop ANN

分析我的反向传播算法后,我了解到它负责占用我60%的计算时间.在我开始研究并行替代方案之前,我想看看我能做些什么.

activate(const double input[])功能仅被占用约5%的时间.该gradient(const double input)功能实现如下:

inline double gradient(const double input) { return (1 - (input * input)); }
Run Code Online (Sandbox Code Playgroud)

有问题的培训功能:

void train(const vector<double>& data, const vector<double>& desired, const double learn_rate, const double momentum) {
        this->activate(data);
        this->calculate_error(desired);

        // adjust weights for layers
        const auto n_layers = this->config.size();
        const auto adjustment = (1 - momentum) * learn_rate;

        for (size_t i = 1; i < n_layers; ++i) {
            const auto& inputs = i - 1 > 0 …
Run Code Online (Sandbox Code Playgroud)

c++ optimization const

15
推荐指数
1
解决办法
722
查看次数

是否未定义行为抛弃函数参数的常量?

想象一下,我有这个C函数(以及头文件中的相应原型)

void clearstring(const char *data) {
    char *dst = (char *)data;
    *dst = 0;
}
Run Code Online (Sandbox Code Playgroud)

有未定义行为在上面的代码,铸造const,或者是它只是一个非常不好的编程习惯?

假设没有使用const限定对象

char name[] = "pmg";
clearstring(name);
Run Code Online (Sandbox Code Playgroud)

c casting const undefined-behavior language-lawyer

15
推荐指数
1
解决办法
1510
查看次数

是将std :: pair <T1,T2> const&转换为std :: pair <T1 const,T2> const&safe?

它是安全的(在理论上还是在实践中),以reinterpret_caststd::pair<T1, T2> const &std::pair<T1 const, T2> const &,假设程序员没有故意做了一些奇怪的类似专业std::pair<T1 const, T2>

c++ templates casting const reinterpret-cast

15
推荐指数
2
解决办法
958
查看次数

从表达式创建PHP类常量的最佳解决方法?

我希望能够做到这样的事情:

class Circle {

    const RADIUS_TO_CIRCUMFERENCE = M_PI * 2;  // Not allowed

    private $radius;

    public function __construct( $radius ) {
        $this->radius = $radius;
    }

    ...

    public function getCircumference() {
        return $this->radius * self::RADIUS_TO_CIRCUMFERENCE;
    }

}
Run Code Online (Sandbox Code Playgroud)

但我不能从这样的表达式创建一个类常量:

该值必须是常量表达式,而不是(例如)变量,属性,数学运算的结果或函数调用.


所以我的问题是:这种PHP限制的最佳解决方法是什么?我知道以下变通方法,但还有其他更好的方法吗?

1.创建一个属性

class Circle {

    private static $RADIUS_TO_CIRCUMFERENCE;

    private $radius;

    public function __construct( $radius ) {
        $this->radius = $radius;
        $this->RADIUS_TO_CIRCUMFERENCE = M_PI * 2;
    }

    ...

    public function getCircumference() {
        return $this->radius * $this->RADIUS_TO_CIRCUMFERENCE;
    }

}
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个,因为价值$RADIUS_TO_CIRCUMFERENCE可以改变,所以它不是真正的"常数".

2.使用 …

php const class constants

15
推荐指数
1
解决办法
9601
查看次数

scanf with const int*const可以工作,但不应该

我有相当于以下代码:

const int* const n = new int;
printf("input: ");
scanf("%d", n);
delete n;
Run Code Online (Sandbox Code Playgroud)

现在,因为n是指向CONSTANT整数的指针,所以这不应该工作(我期待编译器错误).但是,这似乎可以正常工作,甚至可以将输入值存储到*n中.

我想知道,为什么这不会给我一个错误; 它为什么有效?扫描不能改变*n的值吗?

c++ const constants scanf

15
推荐指数
2
解决办法
2454
查看次数

c ++如何初始化数组的const元素

我需要一种方法来初始化我目前正在处理的程序的数组的const元素.问题是我必须用函数初始化这些元素,没有办法像这样做:

const int array[255] = {1, 1278632, 188, ...};
Run Code Online (Sandbox Code Playgroud)

因为我必须生成很多数据.我尝试的是将数据memcpy到const int,但这不起作用,但没有奏效.

 const int array[255];

 void generateData(){
      for(int i = 0; i < 255; i++) {
          initializeSomehowTo(5, array[i]);
      }
 }
Run Code Online (Sandbox Code Playgroud)

我希望你明白我在想什么,对不起,如果我把这个问题翻倍,我一定忽略了它.

c++ arrays initialization const

15
推荐指数
2
解决办法
2225
查看次数