- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
C++ 新手和从书本上学习,所以我可以在推理时非常迂腐或目光短浅。
在模板函数的情况下,我读到当参数通过引用传递时,只允许从引用/指针到非 Const 到引用/指针到 Const 的转换。
这意味着我相信
template <typename T> int compare(T&, T&);
当调用 compare(ci1, ci1) 时应该会失败,ci1 是 constant int,因为引用参数不允许从 Const 到 NonCost 的转换。
但是它在我的编译器(Visual C++ 10)中有效。有人可以解释我哪里错了吗?
template <typename T> int compare(T&, T&);
template <typename T> int compare(T &v1, T &v2)
{
// as before
cout << "compare(T, T)" << endl;
if (v1 < v2) return -1;
if (v2 < v1) return 1;
return 0;
}
const int ci1 = 10;
const int ci2 = 20;
int i1 = 10;
int i2 = 20;
compare(ci1, ci1);
compare(i1, i1);
最佳答案
电话
compare( ci1, ci1 );
产生 const int
类型的 T(以您喜欢的表示法)。
有效的函数签名是
int compare( int const&, int const& )
您可以使用 typeid(x).name()
检查您实际拥有的类型。
注意:使用 g++ 会产生一些无法理解的短格式,然后您需要使用特定于 g++ 的特殊运行时库函数对其进行解码。
干杯。
关于c++ - 模板函数和 Const/NonConst 引用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5537533/
我的类中有常量重载方法: class A{ public: typedef int data[10]; data& operator[](int index);
C++ 新手和从书本上学习,所以我可以在推理时非常迂腐或目光短浅。 在模板函数的情况下,我读到当参数通过引用传递时,只允许从引用/指针到非 Const 到引用/指针到 Const 的转换。 这意味着我
假设我有以下一组函数: typedef uint8_t byte; inline byte *as_bytes(char *data) { return reinterpret_cast(da
我正在构建一个引用计数系统并定义了一个原型(prototype)模板类,它表示对将要使用的对象的所有引用。 我被卡住的地方是我必须区分通过引用对这些对象的 const 和非 const 访问。如果访问
这个非常简单的代码是允许的: class s { public: }; const s& tt = std::move(s()); // Also valid without 'const' 但现在我
这似乎是未定义的行为 union A { int const x; float y; }; A a = { 0 }; a.y = 1; 规范说 Creating a new object at
我可以将函数参数的默认值设置为某个值吗 这不是恒定的?例子: tod := Mod[AbsoluteTime[], 86400] f[x_:tod] := x 在上面,'tod' 每次我评估它都
我收到了 findbug 警告,例如“从非常量字符串生成准备好的语句”。我的场景如下 //My code public static int updateSQL(String sql) throws
哇,好长的标题。 这是我的问题。我在 C++ 中有一个模板类,我正在重载 [] 运算符。我有一个 const 和一个非常量版本,非常量版本通过引用返回,这样类中的项目就可以这样更改: myobject
我有以下代码,其中 FindBugs 在第二行提示“准备好的语句是从 .. 的非常量字符串生成的。”我尝试将“sqlNew”声明为 final 但它没有帮助。我没有在其他任何地方操纵字符串。我如何摆脱
我阅读了发布在 Why does C++ not have a const constructor? 我仍然很困惑为什么那个程序可以编译。并且我试图就这个问题提出我的意见,我不知道为什么它被删除了。所
我正在从事一个项目,其中有一段代码如下所示: String sql = "SELECT MAX(" + columnName + ") FROM " + tableName;
class C { public: void foo() const {} private: void foo() {} }; int main() { C c; c.
我是一名优秀的程序员,十分优秀!