C++中构造函数的一种奇怪行为
A strange behavior about constructors in C++
我直接向您展示代码。
#include <iostream>
#include <stdio.h>
class A {
public:
A(const std::string& name){
std::string aname = "HAHA_" + name;
std::cout << aname << std::endl;
}
~A(){
std::cout << "Done." << std::endl;
}
};
int main() {
size_t len = 5;
char szTmp[30] ={0};
snprintf(szTmp,sizeof(szTmp),"Getlist_V2_%zd",len);
A a(std::string(szTmp));
return 0;
}
预期结果如下:
HAHA_Getlist_V2_5
Done.
但它什么也没输出。当我将A a(std::string(szTmp));
替换为A a(szTmp);
,一切都好。它让我困惑了很长一段时间。
A a(std::string(szTmp));
这是一个函数声明,信不信由你!因此,没有构造A
。
相反,写下:
A a{std::string(szTmp)};
或者,由于存在到std::string
的隐式转换,以下任一项都足够了:
A a{szTmp};
A a(szTmp);
相关文章:
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 构造函数是否有一种现代C++方法来了解其'container'类?
- 有没有一种简单的方法可以在对象向量上调用构造函数?
- 零一参数构造函数
- 在共享指针的值中调用 std::swap 调用一堆构造函数和析构函数
- 哪种 c++ 构造函数样式更好
- 是否有一种方法可以在C 中创建一个未知数变量的构造函数
- 这是否仍然声明一种指针函数的别名?
- 一种比函数引用更有效的方法
- 在一种情况下调用构造函数的顺序C++
- 这是构造函数的一种类型吗
- 有没有一种干净的方法可以将 C# 'params object[]' 构造函数参数转换为C++构造函数?
- C++中构造函数的一种奇怪行为
- 在异常构造函数中参数化错误消息是一种好的做法吗
- 有没有一种方法可以测试默认构造函数是否不存在
- 是否可以在全局对象构造函数中进行打印/日志记录,或者这是一种未定义的行为?
- 我需要以一种可以从循环调用构造函数的方式组织我的类
- c++ OOP哪一种方式给构造函数赋值更好
- 是否有一种方法可以禁用类上的构造函数合成?
- c++11中虚拟类的另一种构造方法