构造函数按值T
获取,因此字符串文字将衰减为char const*
。
使用扣除指南Stack(char const*) -> Stack<std::string>
,
我希望这两种情况都有效。
为什么第二个参数推论Stack ss2 = "string literal"
没有?
#include<vector>
#include<string>
template<typename T>
class Stack {
std::vector<T> elems;
public:
Stack() = default;
Stack(T elm) : elems({std::move(elm)}) { }
};
Stack(char const*) -> Stack<std::string>;
void test() {
Stack ss1 { "works fine."};
// error: conversion from 'const char [15]' to
// non-scalar type 'Stack<std::__cxx11::basic_string<char> >'
// requested
Stack ss2 = "compile error!";
}
编译器资源管理器:https://godbolt.org/g/z3PaBp
答案 0 :(得分:0)
Stack ss2 = "compile error!";
这试图:
将字符串文字(字符数组,char [15])转换为临时字符串
将临时字符串转换为Stack
因为这个原因失败了:
请在此处查看重复问题的完整答案error: conversion from 'const char [5]' to non-scalar type in c++